Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 常量字符数组的内存分配_C - Fatal编程技术网

C 常量字符数组的内存分配

C 常量字符数组的内存分配,c,C,如果我写char*p=“欢迎”。 我可以看到p的地址。但是字符串的地址是什么,即Welcome存储在哪个地址 如果我再写一次,char*s=“欢迎”。p和s将指向相同的地址?在调试器中,如果检查p,您将看到字符串的地址 &p是p本身的地址 不,p和s不能保证指向相同的地址,但它们可能会指向相同的地址。欢迎”是字符串常量,它存储在内存的只读数据部分,但指针p是在堆栈中创建的,它指向该字符串文本。字符串常量“欢迎”通常放在“只读数据”中内存的一部分。 以下是关于:和的很好的解释 您可以通过以下方式找

如果我写char*p=“欢迎”。 我可以看到p的地址。但是字符串的地址是什么,即Welcome存储在哪个地址


如果我再写一次,char*s=“欢迎”。p和s将指向相同的地址?

在调试器中,如果检查
p
,您将看到字符串的地址

&p
p
本身的地址

不,
p
s
不能保证指向相同的地址,但它们可能会指向相同的地址。

欢迎”是字符串常量,它存储在内存的只读数据部分,但指针p是在堆栈中创建的,它指向该字符串文本。字符串常量“欢迎”通常放在“只读数据”中内存的一部分。 以下是关于:和的很好的解释

您可以通过以下方式找到字符串常量“Welcome”的地址

如果我再写一次,char*s=“欢迎”。p和s将指向相同的 地址


同一个字符串常量可能放在同一个地址中,也可能不是。

的确如此。一些编译器循环使用字符串常量,因此地址可能相同。感谢在.map文件中我看到了地址。conststring 0x080717d8节main.o(.conststring)感谢相同的字符串地址,而不是重新创建的字符串地址,因此p和s所指的地址是相同的。问题并不意味着p是局部变量。它也可以在数据段中(可写),而不在堆栈上。谢谢..如何打印此常量字符串的地址*p给出字符串值,&p给出p地址。很抱歉打扰你们。用%s打印*p会给出字符串,%x会给出地址。希望打印出来的%x是常量字符串的地址。
 printf("%p",p);