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掉。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章