我遇到了一个问题,即在使用指针时编辑数组 A 会影响 C 中的数组 B。我的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include "frac_heap.h"
#define ARRAYSIZE 10
fraction heap[][ARRAYSIZE] = {0};
block freeBlocks[][ARRAYSIZE] = {0};
int startingBlock = 0;
void init_Heap(){
int x;
for(x = 0; x < ARRAYSIZE; x ++){
block *currBlock = freeBlocks[x];
currBlock->isFree = 1;
}
}
void dump_heap(){
int x;
for(x = 0; x < ARRAYSIZE; x ++){
fraction* tempFrac = heap[x];
printf("%d\t%d\t%d\n",tempFrac->sign, tempFrac->numerator, tempFrac->denominator);
}
}
fraction* new_frac(){
fraction* testFraction = heap[0];
return testFraction;
}
int main(){
init_Heap();
dump_heap();
fraction *p1;
p1 = new_frac();
p1->sign = -1;
p1->numerator = 2;
p1->denominator = 3;
dump_heap();
}
dump_heap() 只打印出堆的内容以及分数符号、分子和分母。但是,当我运行此代码时的输出如下:
0 0 0
0 1 0
0 1 0
0 1 0
0 1 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
-1 2 3
0 1 0
0 1 0
0 1 0
0 1 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
看到分子中的 1 在分数数组中的许多分数中出现,即使我从未告诉过它把 1 放在那里?如果我编辑对 init_heap() 的调用,则不会发生这种情况。如果我编辑对 init_heap 的调用,则输出为:
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
-1 2 3
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
哪个是对的。我的问题是为什么 init_heap 会影响分数数组,即使在 init_heap 我只是编辑和访问 freeBlocks 数组?