我正在学习一些C ++,并且正在与指针作斗争。我知道我可以通过声明以下三个级别的指针:
int *(x)[5]; 因此,这x是指向5个元素的数组的指针,这些数组是的指针int。我也知道x[0] = *(x+0);,x[1] = *(x+1)等等。
那么,鉴于以上声明,为什么x[0] != x[0][0] != x[0][0][0]呢?
x是一个指向5个指针的数组的指针int。 x[0]是 5个指向的指针的数组int。 x[0][0]是指向的指针int。 x[0][0][0]是一个int。
x[0]
Pointer to array +------+ x[0][0][0]
x -----------------> | | Pointer to int +-------+ 0x500 | 0x100| x[0][0]----------------> 0x100 | 10 | x is a pointer to | | +-------+ an array of 5 +------+
pointers to int | | Pointer to int
0x504 | 0x222| x[0][1]----------------> 0x222
| |
+------+
| | Pointer to int
0x508 | 0x001| x[0][2]----------------> 0x001
| |
+------+
| | Pointer to int
0x50C | 0x123| x[0][3]----------------> 0x123
| |
+------+
| | Pointer to int
0x510 | 0x000| x[0][4]----------------> 0x000
| |
+------+
你可以看到
x[0]是一个数组,在表达式中使用时会转换为指向其第一个元素的指针(有一些例外)。因此x[0]将给出其第一个元素的地址x[0][0]为0x500。 x[0][0]包含的地址,该地址int为0x100。 x[0][0][0]包含的int值10。 因此,x[0]等于&x[0][0],因此,&x[0][0] != x[0][0]。 因此,x[0] != x[0][0] != x[0][0][0] 。
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。