请考虑以下代码:
// Thing is a typedef struct
void f(Thing* things, int size) {
for (int i = 0; i < size; i++) {
Thing my_thing = things[i];
my_thing.a = 10;
}
}
things
指向的数组被分配到堆的某个位置。然而-
my_thing
是在堆栈上分配的“堆栈变量”。那么幕后发生了什么?是否将
things[i]
复制到堆栈并存储在my_thing
中?那么my_thing.a = 10;
要做什么-它是修改原始的things[i]
还是修改“堆栈副本”? 最佳答案
东西[我]被复制到堆栈并存储在我的东西里了吗?
是的,作为记忆拷贝,不是深度拷贝。
我的东西是什么,a=10,它是修改原始的东西还是修改“堆栈副本”?
它只修改堆栈副本。但是在处理指针时要小心,请参见示例here
关于c - 遍历存储在堆上的数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55697198/