通过指针访问数组时出现分段错误

Pet*_*old 3 c arrays pointers operator-precedence

我有一个全局数组声明为

int Team1[12][8];
Run Code Online (Sandbox Code Playgroud)

当我调用该函数时

int readLineupB(int teamNr){

      int (*teamToRead)[12][8];
      teamToRead = &Team1;

      for (int currentPlayersNumber = 1; currentPlayersNumber<11; currentPlayersNumber++) {
        for (int otherNumber = 1; otherNumber<7; otherNumber++) {
            *teamToRead[currentPlayersNumber][otherNumber] = 20;
        }
    } 
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

它填充数组直到位置[10],[3],然后看似[10],[4]我得到一个分段错误,我无法理解为什么.

Sou*_*osh 5

检查数据类型.

teamToRead是一个指向int [12][8]数组的指针.

由于运算符优先级,下标运算符绑定高于解除引用.

所以,如果是的话

  *teamToRead[currentPlayersNumber][otherNumber] = 20;
Run Code Online (Sandbox Code Playgroud)

你想说点什么

  *(* ( teamToRead + currentPlayersNumber ) ) [otherNumber] = 20;
Run Code Online (Sandbox Code Playgroud)

其中,指针算术变为非法,因为它们遵守指针类型,从而冒险越界.

要解决这个问题,您需要通过明确的括号来强制执行取消引用的优先级,例如

 (*teamToRead)[currentPlayersNumber][otherNumber] = 20;
Run Code Online (Sandbox Code Playgroud)