请考虑以下代码:

// 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/

10-12 16:25