• 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  

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

  • 相关阅读:
    tensorflow_知识点
    Win10 1803 谷歌内核浏览器出现假死现象的解决方法汇总
    今日笑话
    留存率例子(待优化)
    安装ODOO13
    freepascal获取进程列表
    vba给图片添加logo
    wps中开始支持javascript了
    获取本地ip
    判断素数
  • 原文地址:https://www.cnblogs.com/hbb0b0/p/1783505.html
Copyright © 2020-2023  润新知