a宣言从其名称读取,按优先顺序依次读取。
b的优先顺序从高到低依次为:
B.1声明中括在括号内的部分
B.2后缀运算符:括号(表示是函数,括号) []表示是数组;
B.3前缀运算符:指向“.”的指针
如果类型说明符(int、long等)紧跟const和/或volatile关键字,它会影响类型说明符。 否则,const和(volatile )很重要
字作用于左邻右舍指针的星号。
例如,char*const*(*next ) );
首先,看到变量名“next”,注意到它被括在括号中。
然后,括号中的内容作为整体出现“next是指向.的指针(即,next是指针)”。 剩下的char * const * (
然后,根据优先级,高于(),即next为char * const*; 剩下的: char * const*
然后,const限定后面的*,不能改变指针指向的地址的内容,也就是返回“只读char *”指针; 剩下的char*
最后,返回一个指向只读char的指针。
总之,next是返回指向只读char的指针的函数指针。
char * const * p; p是指向指针的指针,const限定*p。 也就是说,*p的内容不能变更。 p可以指向其他地址,但不能在*p中更改*p的值。 也就是说,*p=.*p=. *p为只读char*类型,解引p两次得到char类型,**p=. 综合起来,p=…; **p=; 但是,*p=;
char a[]='abcdefg ';
char b[]='hijklmn ';
char *p1=a;
char * const * p2;
p2=p1; //正确
*p2=p1; //错误
**p2='h '; //正确
返回p2; //注意这里也许可以编译,但仍然有错误。 p2是指针p1的地址,指针p1是局部变量,在函数调用返回时废弃