看完本文后还可以看下「C和指针」的第6章和第10章,可以加深对指针和结构体的理解。
关于本次题目,解题步骤如下
1. a 是一个数组,每个元素都是一个结构
2. p是一个指向结构体的指针,存放了数组a的首地址
3. 对于&a[1].x,运算符优先级为[] > , > &, 即下标引用大于访问结构成员大于求地址
4. 根据第3条里的运算规则,运算会得到是数组a中第二个结构x的地址
综上,对应答案和解释如下
- p+1: p是a[0]的地址,p+1是a[1]的地址,同时a[1]的第一个元素是x,p+1也就是a[1].x的地址
- &(*(p+1)).x: 先用*取值得到a[1],然后获取地址
- &(p+1)->x: *+.的操作可以用 ->代替
- &p[1]: 可以把p当作a来操作
- &p[1].x
代码我放在GitHub上: https://github.com/xuzhougeng/learn-c-in-JKSJ/blob/master/jksj-07-pointer-1-c
这里再提一个问题,指针的指针一般在什么情况下用
展开
作者回复: 思考的很不错。要说指针的指针应用场景,一般就是用来替代二维数组的。可其本质和二维数组还有所不同。此外,你可以把指向指针类型的指针,这句话,看成是,指向某个类型的指针,而这某个类型,就是指针类型,所以你这个问题,本质上也是在问指针有啥用。从这个角度,自行思考一下,就明白了。