1,int (*array_p)[3] array_p是指向int数组(元素个数3)的指针
2,
int array[3];
int (*array_p)[3];
array_p=&array//数组添加&,取得“指向数组的指针”
3,
int array[5];
int *p;
3.1
for(p = &array[0];p!=&array[5];p++){printf("%d\n",*p);}
3.2
for(int i = 0; i<5 ; i++){printf("%d\n",*(p+i));}
4
char *color_name[]={"red","green","blue"};
char color_name[][6]={"red","green","blue"};
5,
int func(double d);
int (*func_p)(double); //声明
func_p=func;//将func赋给func_p
func_p(0.5);//此时,func_p等同于func
6,
//只有在声明函数形参的情况下,int a[] 和 int *a 才具有相同的意义。
void func(int a[]){}可以被自动解读为void func(int *a){}
在下面声明的形参,都具有相同的意义。
int func(int *a); /* 写法1 */
int func(int a[]); /* 写法2 */
int func(int a[10]); /* 写法3 */
7,void func(int a[][5])
a 的类型为“int 的数组(元素个数 5)的数组(元素个数不明)”,因此它可以解读成“指向 int 数组(元素个数 5)的指针
void func(int (*a)[5])
pk一下4和7
8,
int *f(); //f:返回指向int指针的函数
int (*pf)(); //pf:指向返回int的函数的指针
*是前置运算符,优先级低于()
int *hoge[10]; hoge 是指向 int 的指针的数组(元素个数 10)
double (*hoge)[3]; hoge 是指向 double 的数组(元素个数3)的指针
int func(int a); func 是返回 int 的函数(参数是 int a)
int (*func_p)(int a) func_p 是指向返回 int 的函数(参数为 int a)的指针
int hoge; hoge 是 int
int *hoge; hoge 是指向 int 的指针
9,
int (*func_table[10])(int a) 可以解释成“指向返回 int 的函数(参数为 int a)的指针的数组(元素个数 10)”
10,
在ANSI C的标准库中,有一个atexit()函数。如果使用这个函数,当程序正常结束的时候,可以回调一个指定的函数
int atexit(void (*func)(void));
英语的表达为:
atexit is function(func is pointer to function (void) returning) returning
atexit 是返回 int 的函数(参数是,指向返回 void 没有参数的函数的指针)
11,
signal()是用于注册信号处理(当中断发生时被调用的函数)的函数。此函数的返回值是之前注册的处理当前信号中断的函数。
也就是说,其中的一个参数和返回值,它们都是相同的类型——指向信号处理函数的指针。在一般的语言中,同样的表现模式出现两次并不会让你感到不适,但是解释 C 语言声明的过程是“一会儿向左一会儿向右”,因此,表示返回值的部分散落了在左右两侧。
void (*signal( int sig , void(*func)(int)) )(int);
英语的表达为:
signal is function(sig is int, func is pointer to function(int) returning void) returning pointer to function(int) returning void
翻译成中文……
signal 是返回“指向返回 void,参数为 int 的函数的指针”的函数,它有两个参数, 一个是 int,另一个是“指向返回 void 参数为 int 的函数的指针”