2009-12-10 103 views

回答

26

第一个创建一个包含字符串的char数组。数组的内容可以修改。第二个创建一个指向字符串文字的字符指针。字符串文字不能修改。

+0

据我所知,在ANSI C中都可以修改 – psihodelia 2009-12-10 12:19:01

+15

你知道错了。该标准禁止修改字符串文字。 – 2009-12-10 12:20:53

+0

好的,谢谢!现在,我会永远记住它:) – psihodelia 2009-12-10 12:23:08

1

推测,功能f修改传递给它的字符串的内容。

+0

是的,它会修改。但为什么f(p_var)使crush和f(a_var)不是? – psihodelia 2009-12-10 12:14:32

+1

因为: char * p_var =“XXX”; 无法修改。 – 2009-12-10 12:16:04

0

数组可以作为指针对待(通常),但这并不意味着它们总是可以互换的。正如另一个人所说,你的p_var指向一个文字,静态的东西不能改变。它可以指向别的东西(例如,p_var = & a_var [0]),但不能更改由引号指定的原始值....

类似的问题是,当您将变量定义为数组放入一个文件中,然后将其作为指针外部使用。

问候

1

正如有人说,char *p_var = "XXX";创建一个指向一个字符串文字是不能改变的,所以编译器实现可以自由地重用文本,例如:

char *p_var = "XXX"; 
char *other = "XXX"; 

编译器能选择通过在存储器中只存储一次“XXX”来优化这一点,并使两个指针指向它,修改它们的值可能会导致意外的行为,所以这就是为什么你不应该尝试修改它们的内容。

相关问题