返回 局部變數的地址
代碼1:
#include <stdio.h>
#define N 5
int * sum(int a ,int b)
{
int result=a+b;
return &result;
}
int * getarray(int array[])
{
int i=0;
for(i=0;i<N;i++)
{
array[i]=array[i]*10;
}
return array;
}
int main(int argc, char *argv[])
{
int i=0;
int a=3,b=5;
printf("\n %d+%d=%d \n",a,b,*sum(a,b));
int array[]={1,2,3,4,5};
int * arrayptr=getarray(array);
for(i=0;i<N;i++)
{
printf(" \n i=%d array[%d]=%d ",i,i,*(arrayptr++));
}
return 0;
}
結果:
3+5=8
i=0 array[0]=10
i=1 array[1]=20
i=2 array[2]=30
i=3 array[3]=40
i=4 array[4]=50
代碼2:
#include <stdio.h>
#define N 5
int * sum(int a ,int b)
{
int result=a+b;
return &result;
}
int * getarray(int array[])
{
int i=0;
for(i=0;i<N;i++)
{
array[i]=array[i]*10;
}
return &array;
}
int main(int argc, char *argv[])
{
int i=0;
int a=3,b=5;
printf("\n %d+%d=%d \n",a,b,*sum(a,b));
int array[]={1,2,3,4,5};
int * arrayptr=getarray(array);
for(i=0;i<N;i++)
{
printf(" \n i=%d array[%d]=%d ",i,i,*(arrayptr++));
}
return 0;
}
結果:
3+5=8
i=0 array[0]=2280752
i=1 array[1]=0
i=2 array[2]=1
i=3 array[3]=1
i=4 array[4]=0
兩端代碼中標紅部分為不相同的地方,為什麼運行結果就完全不一樣?