歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C語言中函數傳指針學習小結

C語言中函數傳指針學習小結

日期:2017/3/1 10:01:53   编辑:Linux編程

開始認為:想看下在出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