tag 标签: 函数返回指针

相关博文
  • 热度 16
    2013-12-10 08:58
    889 次阅读|
    0 个评论
    我有一个程序是这样的: int main() { int *p; int i; int*fun(void); p=fun(); for(i=0;i3;i++) { printf("%d\n",*p); p++; } return 0; }; int* fun(void) { static int str ); return 0; }; char* fun(void) { char str 改成str ={'a','b','c','d','e','f','\0'}; char str ="hello"; 和 char *str="hello"; 不一样。 char str ={'a','b','c'};据我所知,应该是不行的。 您之所以说试验了能行,有两种可能的原因: (1)有可能函数返回后虽然数组str的空间已经被释放了,但暂时该空间还没有被新的内容完全覆盖冲掉,所以您用p 访问的时候那个位置里原来的字符还在。 (2)有可能具体某个编译程序对这类数组做了特殊处理(例如强行把它做成了静态的)。按标准,具体的编译程序应该保证符合标准的程序能正确运行,但“不符合标准”的程序并不一定要“不能运行”。如果某个编译程序放宽标准使得某些不合标准的程序也出了正确的结果,这个编译程序不算不标准。 如果是第一种原因,那么程序上下文改一改,就可能不成立了;如果是第二个原因,那么换一个C版本,就可能不成立了。 【总结】 常规程序中,函数返回的指针通常应该是: (1)指向静态(static)变量; (2)指向专门申请分配的(如用 malloc )空间; (3)指向常量区(如指向字符串"hello"); (4)指向 全局变量 ; 指针不要指向局部自动变量的地址