关于指针和数组的C混淆

时间:2010-03-29 12:59:13

标签: c

char a[]="HELLO";
char *p="HELLO";

a[2]p[2]会获取相同的字符吗?

5 个答案:

答案 0 :(得分:3)

他们将获取的内容是一个字符大小的内存块,在每个内存开始之后或者每个var指向的内存中的地址之后,有2个字符大小的步骤(此处为2个字节)。这恰好是'L'我的例子,但这与内存中的地址不同。

所以是的,在给出的例子中,他们将获取相同的角色。

答案 1 :(得分:2)

p [2]相当于*(p + 2)

HELLO
  ^
*(p+2)

应该注意,第一个“HELLO”可能存储在可写存储页面中,而第二个“HELLO”可能存储在只读页面中。这与您所使用的编译器/平台密切相关。

答案 2 :(得分:2)

在这两种情况下,他们都会获取'L'。但是,它不是'L'。它们存储在不同的地方。这意味着如果你比较他们的指针,它们将是不相等的。

答案 3 :(得分:0)

两者都具有相同的字符值。

答案 4 :(得分:0)

我想这取决于您使用的编译器,但答案可能不是。

顺便说一下,你可以通过比较两个字符的地址来轻松测试。如果它们不同,则:否。

无论如何,你不应该依赖于此;)