如何解释p和q?
typedef short int (SPTR) [2]; //Have brackets around SPTR or not. Its the same.
SPTR实例的类型是short int [2]。
SPTR *p, *q;
p并且q是类型short int (*) [2]
了解 OP 和改进发布的代码
由于您使用pandq来保存来自 的元素的地址a2D,因此最好将SPTRtypedef' d 设置为
typedef char SPTR [2];
之后,
p = q = (char (*)[2])a2D[1]; // Assigns p & q to point to element '4' in a2D array
printf("%X %X\n", (*++p)[1], (q[1])[2]);
如前所述,p指向char大小为 2 的数组。
*p给你数组的第一个元素的地址。
For char a[2],a为您提供数组第一个元素的地址,a[0]或*(a+0)为您提供数组中第一个元素的值。
同样在这种情况下,(*p)[0]或*((*p)+0)为您提供指向的数组的第一个元素p。在您的情况下,它将是4. 相同,q因为两者都拥有相同的地址。
(*p)[1]为您提供指向的数组的第二个元素p
在表达式中(*++p) ,p 增加1. 这是指针算术,1缩放到 指向的数据类型的大小p。因此,p增加2 * sizeof (char)并且现在指向6。
(*++p)[0]给你6。在你的情况下,它是 (*++p)[1],所以它给你 7。
q[1][1]类似于(*(q+1))[1]。递增。q_ 1提到的相同指针算法也p适用q。并且,现在再次p指向q同一个地址。所以q[1][1]也给你7。
q[1][2]旁边是一个字符q[1][1],因此会给你8
笔记:
a是类型pointer-to-char
p是类型pointer-to-array-of-2-chars
两者的类型不同。我已经提到a,只是为了容易理解涉及的表达方式*p