为什么这个程序可以工作?返回局部结构变量
why does this program work??returning local struct 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 并为其赋值,然后返回 it.In 主函数我使用返回值打印结构成员。
我的问题是这怎么可能??一旦我退出函数 add,我的局部变量 p1 是不是被破坏了?如果是,那么我怎么还能看到正确的值,即分配给 p1 的值?我错过了什么??
return p1;
获取可在调用站点使用的 p1
的值副本。 (对于大型 struct
,这在计算上可能非常昂贵,但我不会在这里担心 - 如果您对性能有任何疑问。)
你说在函数中声明的 p1
被销毁是正确的,但那是在复制之后发生的。
(我特意删除了 return 变量周围的括号,因为保留它们是糟糕的风格。)
在您的 add(int a, int b) 方法中,您将返回一个结构变量。在您的主要方法中,您将相同的返回值存储在另一个点变量 (k) 中。它将您的结构值复制到 k 中。因此,您可以访问 printf 函数中的值。
您没有从 add()
返回局部变量。相反,您正在将局部变量复制到 k.
返回 point p1
的副本,而不是 point p1
本身
我有以下程序
#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 并为其赋值,然后返回 it.In 主函数我使用返回值打印结构成员。
我的问题是这怎么可能??一旦我退出函数 add,我的局部变量 p1 是不是被破坏了?如果是,那么我怎么还能看到正确的值,即分配给 p1 的值?我错过了什么??
return p1;
获取可在调用站点使用的 p1
的值副本。 (对于大型 struct
,这在计算上可能非常昂贵,但我不会在这里担心 - 如果您对性能有任何疑问。)
你说在函数中声明的 p1
被销毁是正确的,但那是在复制之后发生的。
(我特意删除了 return 变量周围的括号,因为保留它们是糟糕的风格。)
在您的 add(int a, int b) 方法中,您将返回一个结构变量。在您的主要方法中,您将相同的返回值存储在另一个点变量 (k) 中。它将您的结构值复制到 k 中。因此,您可以访问 printf 函数中的值。
您没有从 add()
返回局部变量。相反,您正在将局部变量复制到 k.
返回 point p1
的副本,而不是 point p1
本身