c - 为什么这个程序可以工作?返回局部结构变量

标签 c function scope structure local-variables

我有下面的程序

#include <stdio.h>
#include<stdlib.h>

typedef struct point{
    int x;
    int y;
}point;

point add(int a, int b){
     int c;
     point p1;
     c= a+b;
     p1.x =c;
     p1.y =c;

     return(p1);
}

int main()
{
    int a=20,b=65;
    point k;
    k = add(a,b);


   printf("k.x=%d,k.y=%d\n",k.x,k.y);


   return 0;
}

程序 o/p:

 k.x=85,k.y=85 

在函数 add 中,我创建了一个临时变量 p1 并为其赋值,然后返回它。在 main 函数中,我使用返回值打印结构成员。

我的问题是这怎么可能??一旦我退出函数 add,我的局部变量 p1 是不是被破坏了?如果是,那么我怎么还能看到正确的值,即分配给 p1 的值?我错过了什么??

最佳答案

return p1; 获取可在调用站点使用的 p1 的值副本。 (对于大型 struct,这在计算上可能非常昂贵,但我不会在这里担心 - 如果您对性能有任何疑问。)

您说函数中声明的 p1 被销毁是正确的,但那是在复制之后发生的。

(我特意删除了返回变量周围的括号,因为保留它们是一种糟糕的风格。)

关于c - 为什么这个程序可以工作?返回局部结构变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49130061/

相关文章:

function - SAS 中的星期几函数

c++ - 对命名空间范围感到困惑!

c++ - C/C++ VS 代码 - 无法开始调试。启动管道程序时出错

c - 随机数功能失灵

Python Numpy nan_to_num 帮助

javascript - 未初始化的变量不应该总是未定义类型吗

jquery - 使用 JQuery 清空动态加载的范围

c++ - 为什么小数点后的数字都是零?

c - 没有从文件中获取 token ?

javascript - this.state 在子组件中未定义