C语言中函数传指针学习小结


开始认为:想看下在出main函数外的其他函数内,用malloc给一个从main函数传进来的指针分配内存,看下该指针是否可以返回,因为它相当于是局部申明的。

代码:

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>

int* fun(int* a,int len)
{
        printf("a:%d\n",a);
        int  b[10] = {1,2,3,4,5,6,7,8,9,0};
        int i;
        a = (int*)malloc(len*(sizeof(int)));
        printf("a:%d\n",a);
        memcpy(a,b,10*(sizeof(int)));
        printf("%d\n",a[1]);
        return a;
}

int main(void)
{
        int*  test;
        int len = 10;
        printf("test:%d\n",test);
        test = fun(test,len);
        printf("%d\n",test[2]);
        printf("test:%d\n",test);
        free(test);

        return 0;
}

结果:

test:-1217622016
a:-1217622016
a:162156552
2
3

发现,指针传进去的时候,它的地址是没有变化的,后来有内存分配后就变了,我想应该是因为它是在堆里的内存分配,所以已经和前面的a不同了,不再是一个局部指针,也就可以返回回去。(如果理解有误,请指正)。然后再在main函数中将堆里面分配那段内存free掉。

相关内容