繁体   English   中英

C - “char var []”和“char * var”之间的区别?

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

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

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

但奇怪的是,如果我使用f(p_var)调用它,则调用类型为f(char argument[])的库函数会破坏正在运行的应用程序。 但是使用f(a_var)就可以了!

为什么?

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

在猜测时,函数f修改传递给它的字符串的内容。

正如其他人所说, char *p_var = "XXX"; 创建一个指向无法更改的字符串文字的指针,因此编译器实现可以自由地重用文字,例如:

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

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

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

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

问候

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM