我有以下程序
#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的值?我错过了什么?
答案 0 :(得分:2)
return p1;
获取可在调用网站上使用的p1
的值副本。 (对于较大的struct
,这在计算上可能非常昂贵,但我不会在此担心 - 如果您对此表现有任何疑问,请执行此操作。)
你说在函数中声明的p1
被销毁是正确的,但是在复制之后会发生这种情况。
(我故意删除了返回变量周围的括号,因为保持它们的风格很差。)
答案 1 :(得分:0)
在add(int a,int b)方法中,您将返回一个struct变量。在main方法中,将相同的返回值存储在另一个点变量(k)中。它将你的struct值复制到k中。因此,您可以访问printf函数中的值。
答案 2 :(得分:0)
您没有从add()
返回本地变量。相反,您将局部变量复制到k。
返回point p1
的副本,而不是point p1
本身