20170429C语言指针二

来源:互联网 发布:2016年java程序员工资 编辑:程序博客网 时间:2024/06/14 00:48

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int *fun(void)
{
    int array[2] = {1,2};
    return array;
}
 
int main(int argc, char *argv[])
{
    int *ptr = fun();
}

问题:
函数fun返回了一个指向数组的指针,主函数中ptr接受到改地址。
可是地址上的值是1和2吗?
我认为,随着函数的结束,值应该被销毁才对,可是实际运行,ptr[0] = 1,ptr[1]=2

原来不能返回局部变量的地址!局部变量地址,这个位置,随时会被其他代码覆盖例如,简单的调用 printf();这个函数,企图输出数值 1,2都也可能出不了。这样个函数,他的返回值,就是几乎无用的,数组里储存的数据,也是无法应用的。所以,这种返回局部变量地址的做法,是要不得的。



函数修改为

#include <stdio.h>
 
int *fun(void)
{
    static int array[2] = {1,2};
    return array;
}
 
int main(int argc, char *argv[])
{
    int *ptr = fun();
}



0 0