我认为指针只能保存其他变量的地址。那么我遇到的以下陈述如何才有效?它拿着一根绳子。
char * name = "Duncan"
感谢。
答案 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字节的内存块地址,其中包含D
,u
,n
,c
的ASCII代码,a
,n
和\0
。
答案 4 :(得分:0)
在这种特殊情况下,编译器会将数据Duncan\0
存储在目标文件中的某个位置,指针将指向那里。
所以是的,指针只持有一个地址。数据在其他地方。
这让我说,写这样的代码并不是那么好。例如,如果通过指针更改该字符串,则会出现未定义的行为。
答案 5 :(得分:0)
这是char指针的定义。在定义之后,在“=”的右侧,您有一个恒定的定义。常量存储在内存中的某处,其地址用作“name”的第一个值。 稍后您将能够为“名称”分配其他值。您没有绑定第一个值,实际上“name”是一个变量。