C – “char var ”和“char * var”之间的区别?
我期待以下vector在RAM中具有相同的表示forms:
char a_var[] = "XXX\x00"; char *p_var = "XXX";
但奇怪的是,如果我使用f(p_var)
调用正在运行的应用程序,则调用types为f(char argument[])
的库函数。 但是使用f(a_var)
是好的!
为什么?
第一个创build一个包含string的char数组。 数组的内容可以修改。 第二个创build一个指向string文字的字符指针。 string文字不能被修改。
猜测,函数f
修改传递给它的string的内容。
正如别人所说, char *p_var = "XXX";
创build一个指向不能改变的string文字的指针,所以编译器实现可以自由地重用文字,例如:
char *p_var = "XXX"; char *other = "XXX";
编译器可以select通过在内存中只存储一次“XXX”来优化这个,并使两个指针指向它,修改它们的值可能会导致意外的行为,所以这就是为什么你不应该尝试修改它们的内容。
数组可以作为指针对待(通常),但这并不意味着它们总是可以互换的。 另一个说,你的p_var指向一个文字,静态的东西,不能改变。 它可以指向别的东西(例如,p_var =&a_var [0]),但不能更改由引号指定的原始值….
一个类似的问题是当你将一个variables定义为一个文件中的数组,然后将其作为指针外部使用。
问候