复杂声明
声明只是一个约定俗成的规则
它不一定符合自然语言的逻辑
看不懂声明一般是遇到了函数指针和数组的声明
其实int* b这样写才是科学的,因为左边是类型,右边是变量名
但是复杂声明不太允许这样写,风格不太统一
所以就有了int *b这样的写法,它的意思是b=int*
int *b、int *(b)、int (*b)都是指向 一个int类型的变量 的指针
函数指针声明
int (*func)()
这是格式,它的意思是func=int (*)()
即func是一个 返回类型为int的函数 的指针
第一个括号是为了把指针的声明塞进去
如果去掉括号,就变成了 函数声明 int func();
是的,这个就是你非要把函数写在最下面然后识别不到,最后要在文件最上面写的东西
实际上函数也是一种变量类型,叫函数类型
数组声明
int a[]
它的意思是a=int [],即为a是一个int型数组
(提醒一下,所有[]里面都需要写数组大小)
- 指针的数组
int *b[]:- 等于
int *(b[])、int *(b)[] - 实为
b=int*[]
- 等于
- 指向数组的指针
int (*b)[]:x为变量名,(*x)表示"x是指向该空间的指针"- 也就是说除了
int *b,只有把*和x直接括起来时才表示x是指针类型
区别在于*b和[]有没有用()隔开
一个括号层内只有*而没有[]的话,可以把这层的子括号去掉,如(*(*b[]))=(**b[])