歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

Copyright © Linux教程網 All Rights Reserved