字符串跟字符指针的区别
字符串和字符指针的区别
为什么p、q输出的值一样呢 虽然我理解他们都指向“123”的内存 但是这两个“123”为什么就一定同一块内存而不是两块内存只是内容相同而已?难道只是因为他们是字符串常量所以肯定就指一个内存?这样的话那要想让指针指向另一个装“123”的内存不就没办法了(除了字符数组直接赋值“123“)?
突然迷糊了 求指教!
------解决方案--------------------
常量字符串分配在堆中,只有一份,在程序运行期间一直存在的,
------解决方案--------------------
常量字符串不应该在常量区嘛??
------解决方案--------------------
字符串字面值量分配在常量区,跟全局变量是一样的,也称全局去。你这样的定义,只会在常量区维持一份,所以两个指向同一个地址是很正常的。
------解决方案--------------------
你为什么“要想让指针指向另一个装“123”的内存”?
要读?反正读出来内容都是一样的,何必多存一份?
要改?那是常量区,不许修改,除非复制到其他地方,比如char a[]
所以,用同一块内存就可以满足需求,那就没必要浪费空间,除非你找到什么合理的需求证明这样不够用的。
char a[]="123";
char *p="123";
char *q="123";
printf("a===%p\n",a); //a===0xbfdda00c %p表示输出a的地址
printf("p===%p\n",p); //p===0x8048839
printf("q===%p\n",q); //q===0x8048839
为什么p、q输出的值一样呢 虽然我理解他们都指向“123”的内存 但是这两个“123”为什么就一定同一块内存而不是两块内存只是内容相同而已?难道只是因为他们是字符串常量所以肯定就指一个内存?这样的话那要想让指针指向另一个装“123”的内存不就没办法了(除了字符数组直接赋值“123“)?
突然迷糊了 求指教!
------解决方案--------------------
常量字符串分配在堆中,只有一份,在程序运行期间一直存在的,
------解决方案--------------------
常量字符串不应该在常量区嘛??
------解决方案--------------------
字符串字面值量分配在常量区,跟全局变量是一样的,也称全局去。你这样的定义,只会在常量区维持一份,所以两个指向同一个地址是很正常的。
------解决方案--------------------
你为什么“要想让指针指向另一个装“123”的内存”?
要读?反正读出来内容都是一样的,何必多存一份?
要改?那是常量区,不许修改,除非复制到其他地方,比如char a[]
所以,用同一块内存就可以满足需求,那就没必要浪费空间,除非你找到什么合理的需求证明这样不够用的。