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”的地址

 

posted on 2017-03-23 15:16  whitem  阅读(470)  评论(0编辑  收藏  举报