gpt4 book ai didi

c - 该结构在 C 内部如何工作?如何将数据从一种结构复制到另一种结构?

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:31 25 4
gpt4 key购买 nike

嗯,我知道结构体在C中是怎么工作的,但是我不知道它内部是怎么工作的,因为我还在学习汇编,我是初学者,嗯,我的问题是,在下面的代码中我有一个名为 P 的结构,并从这个名为 A 和 B 的结构中创建两个变量,在将 A 分配给 B 之后,因此 B = A,我可以从 A 获取数据,即使不使用指针,这个副本如何A到B的数据做了什么?

#include <stdio.h>

struct P{
int x;
int y;
}A, B;

int main(void) {
printf("%p\n%p\n\n", &A, &B);
printf("Member x of a: %p\nMember y of a: %p\n", &A.x, &A.y);
printf("Member x of b: %p\nMember y of b: %p\n", &B.x, &B.y);
A.x = 10;
A.y = 15;
B = A; // 10
printf("%d\n%d\n", B.x, B.y);
return 0;
}

最佳答案

我认为,您的示例代码中有趣的地方是行

B = A;

通常,编译器以两种方式之一实现这一点。

(1) 它单独复制成员,或多或少产生与您所说的完全相同的效果

B.x = A.x;
B.y = A.y;

(2) 它发出一个低级字节复制循环(或机器指令),产生以下效果

memcpy(&B, &A, sizeof(struct P));

(除非这通常是在线完成的,不涉及实际的函数调用)。

编译器将根据哪个更小(发出的代码更少),哪个更高效,或者编译器试图优化的任何内容来选择其中一个。

关于c - 该结构在 C 内部如何工作?如何将数据从一种结构复制到另一种结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57129164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com