Ori*_*ski 12 c pointers pointer-arithmetic
请考虑以下代码片段:
int (*p)[3];
int (*q)[3];
q = p;
q++;
printf("%d, %d\n", q, p);
printf("%d\n", q-p);
Run Code Online (Sandbox Code Playgroud)
我知道指针算法是智能的,这意味着操作q++
前进q
足够的字节指向下一个3整数数组,所以第一次打印是' 12, 0
' 并不意味着递增q
使它在12中更大.
但第二次印刷确实令我惊讶.它打印1!
那么为什么它会打印1而不是12?它只是困惑我.
Gre*_*ill 27
与++
增量运算符一样,-
带指针的减法运算符也会考虑指向的对象的大小.具体来说,返回的结果是指针值中的字节数差异除以指向对象的大小(在您的示例中为12).所以差异是12个字节,除以12或1.