鹿晗的头发是什么颜色:C语言 自定义函数返回数组的问题

来源:百度文库 编辑:九乡新闻网 时间:2024/04/27 15:37:59

C语言 自定义函数返回数组的问题

5[ 标签:c语言,自定义函数 ]

#include

char* text( void );

int main( void )

{

    char* str = NULL;

    str = text();

    puts(str);

    getchar();

}

char* text( void )

{

      char p[] = "Hello, world!";

      return p;

}

对于上述代码,为何无法输出“Hello, world!”?为何当把其中的p[]改为*p后就可以输出“Hello, world!”了?

这里涉及到函数返回值、临时变量、局部自动变量、内存的问题,希望你能在答案中解释一下。

我从网上找过许多类似的问题,但是仍然似懂非懂,所以希望你能用自己的话回答。

问题补充  2010-05-08 13:10

我定义数组charp[] = "Hello, world!";

那么此时的p(不带下标)也是一个指针,为什么无法将它的值返回给主调函数呢?

Who?R'U 回答:1 人气:1 解决时间:2010-05-14 12:43

满意答案

好评率:0%

char p[] = "Hello, world!"; 

是表示定义一个 字符串数组,而且是text( void )函数内的局部变量

作用域只在text( void )函数内部,离开函数就无效了

 

char *p = "Hello, world!";

是表示定义了一个 字符串常量,作用域是全局的,

指针 p 则指向这个常量 "Hello, world!",所以可以返回 p

回答人的补充   2010-05-08 13:55

因为字符串数组 charp[] = "Hello, world!"; 是一个是text( void )函数内的局部变量

作用域只在text( void )函数内部,离开函数就无效了

 

你可以返回指针 p,

但p所指向的 "Hello, world!"字符串 是不能在外部访问的,

它是程序栈上的数据,但你可以用 malloc 等函数分配出来的则可以返回