int a[2][3];
cout << a+1 << " " << a << " " << (a+1) - a << endl;
Run Code Online (Sandbox Code Playgroud)
输出:
0029FAC0 0029FAB4 1
Run Code Online (Sandbox Code Playgroud)
不(a+1)-a应该0029FAC0-0029FAB4=12?
不,因为指针算术根据您指向的东西进行缩放.在这种情况下,您指向一个三元素的整数数组,每个长度为四个字节,总共十二个字节.但是这会缩减到算术中的一个"元素".
这与你在打印时获得0029FAC0而不是0029FAB5(0029FAB4 + 1当它没有缩放时)相同的原因a+1.
如果将输出行更改为:
cout << a+1 << " "
<< a << " "
<< (a+1) - a << " "
<< (int)(a+1)-(int)(a) << endl;
Run Code Online (Sandbox Code Playgroud)
你会看到缩放在最后一个词中消失,因为它不再是指针的减法:
0xbfaa0ad4 0xbfaa0ac8 1 12
Run Code Online (Sandbox Code Playgroud)
请记住,a+1in 仍然(int)(a+1) 是缩放的,因为a它仍然是指针.它只是没有缩放的减法,因为在这一点上,两个值都已转换为整数(通常的注意事项适用于指针和整数之间的转换,这对我的特定实现是安全的,但C99并没有强制要求).
| 归档时间: |
|
| 查看次数: |
152 次 |
| 最近记录: |