2010-03-29 146 views
0
char a[]="HELLO"; 
char *p="HELLO"; 

a[2]p[2]获取相同的字符?C指针和阵列混淆

+2

是的。 __________ – kennytm 2010-03-29 13:01:12

+0

你是指内存中的价值或地址? – ereOn 2010-03-29 13:06:13

回答

0

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

顺便说一句,您可以通过比较两个字符的地址来轻松地进行测试。如果它们不同,那么:不。

无论如何,你不应该依赖于这一点;)

0

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

+0

...但您应该假设已分配两个物理上分离的“HELLO”字符串。 – 2011-03-17 09:17:11

3

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

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

+0

你确定它不是相同的内存地址? :) – 2010-03-29 13:05:04

+0

感谢所有.. – 2010-03-29 13:15:37

+0

@Nick D:它不能是相同的内存地址。 'a'是包含字符串文字“HELLO”副本的数组,而'p'是指向字符串文字“HELLO”的指针。 – 2010-03-29 13:20:49

2

是的。

P [2]等于*(P + 2)

HELLO 
^
*(p+2) 

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

2

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