大神,关于下标引用,1[ap] 输出很奇怪
请教各位大神,关于下标引用,-1[ap] 输出很奇怪
输出:
1 4 1967885525 5910376 2 -3 5
请问2[a], -1[ap], 6[a] 输出的结果要怎么解释呢?
------解决思路----------------------
当 p i 是一个指针和一个整型时:
p[i]
i[p]
*(p+i)
*(i+p)
是等价的。
------解决思路----------------------
2[a]就是a[2]在for循环里赋的值,所以是2
-1[ap]由于下标运算符的优先级大于负号,所以它与ap[-1]不一样
应该是-ap[1],由于ap = a + 2所以-ap[1] = -a[3] = -3
6[a]就量a[6]越界了,不过地址正好是i的,i加到5,循环结束,所以a[6] = 5
#include <cstdio>
using namespace std;
int main()
{
int a[5];
for (int i = 0; i < 5; i++) {
a[i] = i;
}
int *ap = a+2;
printf("%d %d %d %d %d %d %d\n", ap[-1], ap[2], a[-1], ap[6], 2[a], -1[ap], 6[a]);
return 0;
}
输出:
1 4 1967885525 5910376 2 -3 5
请问2[a], -1[ap], 6[a] 输出的结果要怎么解释呢?
------解决思路----------------------
当 p i 是一个指针和一个整型时:
p[i]
i[p]
*(p+i)
*(i+p)
是等价的。
------解决思路----------------------
2[a]就是a[2]在for循环里赋的值,所以是2
-1[ap]由于下标运算符的优先级大于负号,所以它与ap[-1]不一样
应该是-ap[1],由于ap = a + 2所以-ap[1] = -a[3] = -3
6[a]就量a[6]越界了,不过地址正好是i的,i加到5,循环结束,所以a[6] = 5