复杂声明
声明只是一个约定俗成的规则
它不一定符合自然语言的逻辑
看不懂声明一般是遇到了函数指针和数组的声明
其实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[])