关于数组:C – “char var []”和“char * var”之间的区别?

C - Difference between “char var[]” and “char *var”?

我期望以下两个向量在RAM中具有相同的表示:

1
2
char a_var[] ="XXX\x00";
char *p_var  ="XXX";

但奇怪的是,如果使用f(p_var)调用一个f(char argument[])类型的库函数,就会使正在运行的应用程序崩溃。但是使用f(a_var)是可以的!

为什么?


第一个创源的阵列中氟的字符的字符串。在内容的阵列可以改进的。第二次创源字符指针这一点对一个字符串的literal。。。。。。。字符串字面值是不能修改的。 </P >


为他人说,char *p_var ="XXX";创源A的指针到一个字符串的literal那不可能是变了,所以编译器implementations是自由的重用的文字,例如: </P >

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

一个编译器可以选择的optimize这中储存的"XXX"的只读存储器的制造在一次和分球都点到它,它们的值可以缓解铅对unexpected行为,所以这就是为什么你的应不尝试去修改他们的内容。 </P >


在想,"fmodifies contents函数中的字符串通过到它。 </P >


翼可以处理(generally)作为分球,但是那是不均的,他们是永远的interchangeable。。。。。。。为其他人说,你的_ VaR的P点的literal,静态的东西是不能被改变了。它可以点到其他的东西(如P _ var = &;_ var a [ 0 ]),但是你不能改变的原始值,你用specified quotes……………… </P >

一个类似的问题是当你是DEFINE A变为一个阵列中的一个文件,然后外部使用它作为一个指针。 </P >

关于 </P >