C-函数与指针
复杂的声明请登录 cdecl:C 胡言乱语↔英语。将会翻译指针是什么类型的。
#include <stdio.h>
#include <stdlib.h>
#include <io_utils.h>
// 1
int *(f1(int, double));
// 2
int (*f2)(int, double);
// 3
int *(*f3)(int, double);
// 4
// int (*f4)(int, double)[];
// 5
// int (*f5)[](int, double);
typedef int (*Func)(int, double);
typedef int Boolean;
typedef int *IntPtr;
typedef int IntArray[];
int Add(int left, double right) {
return (int) (left + right);
}
void InitPointer(int **ptr, int length, int default_value) {
*ptr = malloc(sizeof(int) * length);
for (int i = 0; i < length; ++i) {
(*ptr)[i] = default_value;
}
}
int main() {
int a;
IntPtr p;
IntArray players = {1,3,4,5};
PRINT_HEX(&main);
PRINT_HEX(&InitPointer);
void (*func)(int **ptr, int length, int default_value) = &InitPointer;
func(&p, 10, 0);
InitPointer(&p, 10, 0);
(*func)(&p, 10, 0);
(*InitPointer)(&p, 10, 0);
PRINT_INT_ARRAY(p, 10);
free(p);
Func func1 = &Add;
int result = func1(1, 3.0);
PRINT_INT(result);
return 0;
}