为什么我在2D数组中获得相同的地址?

Pet*_*ter 1 c arrays memory-address

最近我在为2D数组赋值时遇到了这个问题.为了表示我的问题,我创建了小C代码.我正在使用QT创建者(社区)3.3.0和minGW 4.9.1 32位.

#include <stdio.h>
int main(void){
double m[2][2];
for (int i = 0 ; i<3; i++){
    for(int j=0; j<3; j++)
         printf("%p[%d][%d]     ", (void*)&m[i][j],i,j);
    printf("\n");
 }
return 0;
}
Run Code Online (Sandbox Code Playgroud)

作为输出我得到内存地址

0028FE98[0][0]     0028FEA0[0][1]     0028FEA8[0][2]
0028FEA8[1][0]     0028FEB0[1][1]     0028FEB8[1][2]
0028FEB8[2][0]     0028FEC0[2][1]     0028FEC8[2][2]
Run Code Online (Sandbox Code Playgroud)

您可以看到不相等的数组项具有相同的地址.因此,当我为例如[1] [2]赋值时,[2] [0]中的值也会改变.

请给我任何关于如何解决这个问题的建议.非常感谢你.

Pau*_*aul 5

你的数组应该是3x3:

double m[3][3];
Run Code Online (Sandbox Code Playgroud)

或者你的循环应该只迭代两次,而不是三次.

您现在拥有的代码访问一些超出范围的内存,导致未定义的行为.