我正在通过一些例子来学习数组 C。我遇到了一种奇怪的情况,我的代码每次使用相同的输入都会产生不同的输出。
int main(){
int arr[6][6];
arr[0][0]=1;
arr[0][1]=1;
arr[0][2]=1;
arr[0][3]=0;
arr[0][4]=0;
arr[0][5]=0;
arr[1][0]=0;
arr[1][1]=1;
arr[1][2]=0;
arr[1][3]=0;
arr[1][4]=0;
arr[1][5]=0;
arr[2][0]=1;
arr[2][1]=1;
arr[2][2]=1;
arr[2][3]=0;
arr[2][4]=0;
arr[2][5]=0;
arr[3][0]=0;
arr[3][1]=9;
arr[3][2]=2;
arr[3][3]=-4;
arr[3][4]=-4;
arr[3][5]=0;
arr[4][0]=0;
arr[4][1]=0;
arr[4][2]=0;
arr[4][3]=-2;
arr[4][4]=0;
arr[4][5]=0;
arr[5][0]=0;
arr[5][1]=0;
arr[5][2]=-1;
arr[5][3]=-2;
arr[5][4]=-4;
arr[5][5]=0;
int tmpSum=0;
int sum=0;
for(int arr_i = 0; arr_i < 6; arr_i++){
for(int arr_j = 0; arr_j < 4; arr_j++){
if(arr[arr_i][arr_j]!=0 && arr[arr_i][arr_j+2]!=0){
tmpSum=0;
tmpSum+=arr[arr_i][arr_j]+arr[arr_i+1][arr_j]+arr[arr_i+2][arr_j];
tmpSum+=arr[arr_i+1][arr_j+1];
tmpSum+=arr[arr_i][arr_j+2]+arr[arr_i+1][arr_j+2]+arr[arr_i+2][arr_j+2];
if(tmpSum>sum){
sum=tmpSum;
}
}
}
}
printf("%d\n",sum);
return 0;
}
我的输出不同如下:
sh-4.3$ main
1596448349
sh-4.3$ main
1608309885
sh-4.3$ main
13
我的预期输出始终是 13 抱歉,如果这个问题太基础了。
最佳答案
您正在尝试访问此处数组之外的值:
tmpSum+=arr[arr_i][arr_j]+arr[arr_i+1][arr_j]+arr[arr_i+2][arr_j];
当arr_i
为5(外循环的最后一次迭代)时,arr_i+2
返回7,arr_i+1
返回6 .数组的最后一个可访问索引是5
,因此失败。
arr[5]: [ 0| 0|-1|-2|-4| 0]123545634234234
通过访问arr[0][6]
,您将进入数组之外并仅读取随机内存,这将导致未定义的行为。在这种情况下,未定义的行为表现为随机结果。
这同样适用于添加到 tmpSum
的其他两次尝试。
关于c - C 中的数组和显示不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37629702/