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