作为函数参数传递时,如何访问“ int”动态数组的数据?

时间:2018-12-27 02:31:11

标签: c arrays pointers debugging

在我的代码中,我尝试增加特定数组索引的值。问题是当我用++将其递增时,由于某种原因(而不是1),其值将递增4。我认为我访问该索引值的方式是错误的。

void updateData(char** usernames, int** userWins, int** userDraws, int** userDefeats,
    int totalUsers,char username1[],char username2[],int whoIsWinner,char againstPC){
  int i;
  printf("Username: %s.\tWins: %d.\tDraws: %d.\tDefeats: %d.\n",
      usernames[0],userWins[0],userDraws[0],userDefeats[0]);
  userWins[0]++;
  userDraws[0]++;
  userDefeats[0]++;
  printf("Username: %s.\tWins: %d.\tDraws: %d.\tDefeats: %d.\n",
      usernames[0],userWins[0],userDraws[0],userDefeats[0]);
}

output

userWins,userDraws,userDefeats是动态int数组。我使用**是因为我希望它们通过引用传递。请忽略该函数的最后5个参数。

编辑:添加了声明和函数调用

int* userWins;
int* userDraws;
int* userDefeats;
userWins=(int*) malloc(sizeof(int)*totalUsers);
userDraws=(int*) malloc(sizeof(int)*totalUsers);
userDefeats=(int*) malloc(sizeof(int)*totalUsers);
updateData(usernames,userWins,userDraws,userDefeats,totalUsers,tempUsername1,
        tempUsername2,tempWinner,againstPC);

1 个答案:

答案 0 :(得分:1)

您的函数带有一个双指针,这意味着要获取该值,您必须将其取消引用两次。但是,userWins[0]一次取消引用userWins,您将获得一个指针。然后++运算符将值增加指针大小,在您的系统上为4。如果userWins是一个数组,只需将其作为int* userWins传递即可。