关于子函数返回数组名的问题
代码如下:
- C/C++ code
#include<stdio.h>char* check(void){ char p[] = "abc\n"; return p;}int main(){ char *temp = check(); printf("%c\n",*temp); printf("%s\n",temp); return 0;}打印的结果是a和乱码。我想知道为什么,谢了.....
[解决办法]
局部指针的话,通常人都认为指向的局部变量失效,那该地址存的是垃圾值,其实不然,系统要在接到你要操作这个内存的指令后才会把它清0,它并不是立刻清0,就好比文件一样,并不是接到指令立刻把文件全清0,只是标记告诉系统这个空间可用,文件一般是在的。
数组也是一样,下面有个小实例,第一个能正常输入,第二个则不行,因为在它之前操作了这块内存,操作了这块内存。
- C/C++ code
#include "stdafx.h"char * Cstr(void){ char a[10] = "like"; return a; }int main(void) { char *a=Cstr(); printf("%c\n",*(a+1)); printf("%c\n",*(a+1)); return 0; }