ポインターを使用しているときに、配列 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 があるのを参照してください。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 で freeBlocks 配列を編集してアクセスしているだけなのに、init_heap が分数配列に影響を与えるのはなぜですか?