C waring:function returns address of local variable 为什么两段代码运行结果完全不一样?



返回 局部变量的地址
代码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  

 

两端代码中标红部分为不相同的地方,为什么运行结果就完全不一样?

 

posted @ 2010-07-23 10:23  b0b0  阅读(645)  评论(0编辑  收藏  举报