在C语言中,* p = vec [n]与p =&vec [n]相同吗?

时间:2018-10-18 07:49:48

标签: c pointers

我是C语言中的自学指针,我的问题是:*p=vec[n]与编写p=&vec[n]相同,其中n只是一个索引,而p是指针?

3 个答案:

答案 0 :(得分:6)

除了其他答案,这里还有一个粗略的图形解释。

Answer illustration

答案 1 :(得分:3)

它们是两个不同的表达式:

指针是一种保存内存地址的类型。所以当你写:

p = &vec[n]

指针的地址与n的第vec个元素的地址相同

写作时

*p = vec[n]

您实际上声明位于p地址的内存应该与n元素vec的内容相同。

以下内容可能会清楚:

      | original        | p = &vec[n]     | *p = vec[n]
------+-----------------+-----------------+----------------
data  | Address Content | Address Content | Address Content
------+-----------------+-----------------+----------------
p     | 0x12345 0000000 | 0xabcde 0000005 | 0x12345 0000005
vec[n]| 0xabcde 0000005 | 0xabcde 0000005 | 0xabcde 0000005

答案 2 :(得分:2)

不,不是。

当您执行*p = ...时,会为p当前指向的位置分配一个值。

使用p = ...,您将p指向其他地方。