【C语言点滴】20101124期 char* p 与 char p[] 区别

来源:互联网 发布:vf数据库视频教程网易 编辑:程序博客网 时间:2024/04/29 09:10

c语言里面 char * 和 char [] 的区别

 

 

#include "stdio.h"

char* fun()
{
    char* p = "hello";
    return p;
}

char* fun1()
{
    char p1[] = "hello";
    return p1;
}

int main()
{
    printf( fun() );
    printf( fun1() );
    return 0;
}

 

在上面的程序里面一般很容理解 p 和 p1 都是局部变量。但是运行的结果有一个乱码

p1指向的字符数组在函数返回后,被清空了。 p所指向的字符串则没有被当做局部变量。

code area存放程序的代码
date area存放程序的全局数据和静态数据
heap area存放程序的动态数据
stack area存放程序的局部数据

也就是说 p1[] 被理解为一个局部变量(字符数组),分配的空间在stack area里面。而p后面的字符串被当做了一个常量(const),放在date area。
所以在函数返回后,stack被清空,p[]数组里面的数据就没有了。而pp的数组还存在。