char * name =“Duncan”怎么样;指针只能保存地址时有效吗?

时间:2011-12-18 20:53:45

标签: c++ pointers

我认为指针只能保存其他变量的地址。那么我遇到的以下陈述如何才有效?它拿着一根绳子。

char * name = "Duncan"

感谢。

6 个答案:

答案 0 :(得分:4)

它持有一个指向字符串的指针。那不一样。 name只包含一个包含字符串的内存地址。

答案 1 :(得分:3)

“Duncan”是一个以空字符结尾的字符串,因此是一个char({'D', 'u', 'n', 'c', 'a', 'n', '\0'})数组。 char*name="Duncan";将name设置为数组的地址。

你的语句在C中没问题,但在C ++中“Duncan”是一个const char数组,所以你应该使用const char *name = "Duncan"

顺便说一句,如果你不需要更改指针变量名,最好有const char name[] = "Duncan"。这只为字符串分配内存。您的示例代码为字符串和指针变量名分配内存。 (当然编译器可能会优化名称。)

答案 2 :(得分:1)

它仍然指向一个字符串。字符串首先放入内存,name指向该内存。它已编译到您的程序中,因此可能并不明显。

答案 3 :(得分:1)

  

指针只能将地址保存到其他变量。

这是不正确的:引用保存其他变量的地址;指针可以包含任何内容的地址,甚至不包含任何内容(例如NULL)。

在这种情况下,name保存一个7字节的内存块地址,其中包含Dunc的ASCII代码,an\0

答案 4 :(得分:0)

在这种特殊情况下,编译器会将数据Duncan\0存储在目标文件中的某个位置,指针将指向那里。

所以是的,指针只持有一个地址。数据在其他地方。

这让我说,写这样的代码并不是那么好。例如,如果通过指针更改该字符串,则会出现未定义的行为。

答案 5 :(得分:0)

这是char指针的定义。在定义之后,在“=”的右侧,您有一个恒定的定义。常量存储在内存中的某处,其地址用作“name”的第一个值。 稍后您将能够为“名称”分配其他值。您没有绑定第一个值,实际上“name”是一个变量。