分配新值时,2D数组元素不会改变?

时间:2014-02-04 03:03:17

标签: c arrays pointers

我无法弄清楚为什么选民福瑞斯的价值观在这里没有变化。从函数返回时,c中的数组是否未被引用?我打算在DetermWinner返回时在另一种方法中使用voterFavorites。

int determineWinner( int tallyCard[], int maxVotes, int numberOfRestaurants,int **voterFavorites) {
int x, y, z, zz, max = -999, min = 999, maxIndex, percent; 

for ( x = 0 ; x < numberOfRestaurants ; x++ ) { 
    if (tallyCard[x] > max) {
        maxIndex = x;
        max = tallyCard[x];
        printf("%i maxIndex; %i max\n", maxIndex, max);
    } 
    if (tallyCard[x] < min) {
        if (tallyCard[x] != 999) {
            min = tallyCard[x];
        }
    }
}

percent = max * 100 /maxVotes;
printf("%i percent \n", percent);
if ( percent >= 50) {
    return maxIndex;
} else {
    for(x = 0; x < maxVotes ; x++) {
        for (y = 0; y < 4; y++) {
            if (voterFavorites[x][y] == min) {
                voterFavorites[x][y] = 999;
            }
        } 
    }
    return -444; // arbitrarily small number
}

1 个答案:

答案 0 :(得分:1)

  

我无法弄清楚为什么voterFavorites的值在这里没有变化。

这是一个了解如何进行运行时调试的机会。您应该设法将问题空间划分为两个主要问题的答案:

  1. 我是否正在执行我期望的代码(分配给voterFavorites[x][y])? ......如果是的话......
  2. 为什么当我从调用框架迭代这些值时,我无法看到更改?“
  3. 要回答第一个问题,您应该使用调试器并在相关语句上设置断点。如果它从未遇到过,那么导致它的条件很可能并不像你期望的那样。

    要回答第二个问题,您应该注意您正在使用的数组基础的虚拟内存地址以及您希望接收分配的元素的特定地址。将这些地址与调用帧中出现的地址或访问数组的其他代码进行比较。

    我怀疑你会得知2D数组不是你想象的那样,因为它没有被正确分配或初始化。