char *p = "abc";char p[] = "abc";两者之间的区别
#include<iostream> #include<string> /*char *p = "abc";char p[] = "abc";两者之间的区别*/ char * GetStringPoint(void) { char *p = "abcd"; printf("%x\n",p); return p; } char *GetStringArray(void) { char p[] = "abcd"; printf("%x\n", p); return p; } int main() { char *p; char *p1; p = GetStringPoint(); printf("GetStringPoint:%s,%x\n", p, &p); p1 = GetStringArray(); printf("GetStringArray:%s,%x\n", p1,&p1); return 0; }
这张图的地址为:红色标记的是GetStringPoint()对应的地址的内容看到是不知道的内容,而非函数初始化给定的内容,说明函数结束后,内存已经被释放掉!
这张图中对应的地址为:红色标记的是GetStringPoint()对应的地址的内容仍然存在,为初始赋值的字符串abcd!
总结说明:
char p[] = "abcd"; //用来声明一个数组p,为局部变量,存储在栈区
char *p = "abcd"; //用来声明一个指针p,指向“abcd”字符串起始位置,“abcd”存储在静态数据区,p是局部指针变量存储在栈区,指向“abcd”的地址