#include<stdio.h>
void storeTables(int arr[][10] , int n ,int number);
int main() {
int tables[2][10];
storeTables(&tables[1],1,2);
storeTables(tables,0,3);
for(int i = 0 ; i<10 ; i++){
printf("%d \t",(tables[0][i]));
}
printf("\n");
for(int i = 0 ; i<10 ; i++){
printf("%d \t",tables[1][i]);
}
return 0 ;
}
void storeTables(int arr[][10] , int n ,int number){
for(int i = 0 ; i<10 ; i++){
arr[n][i] = number * (i+1) ;
}
}
看看这段代码。当我写 storeTables(tables,0,2); 时在 storeTable 中;它给出了期望的结果。如果我写 storeTables(&tables[0],0,2);它仍然给出了期望的结果。但是当我写 storeTables(&tables[1],1,2); 时结果它给出了随机地址。这可能是错误的。传递 &tables[1] 仅意味着传递 2d array 的第二行。这样做有什么问题。为什么答案是错误的?
我尝试询问 chatGPT 但它不理解错误。我期待结果是 2 和 3 的表。如果我将指针传递给二维数组,我将得到结果。如果我将指针传递给一个包含 10 个整数的数组。我得到了结果,但我首先将指针传递给 10 个整数的第二个数组,我的结果变成错误的开始打印地址。像 &tables[0][1] 或tables + 1 这样的东西也不会工作,因为我已经尝试了所有这些,我也尝试在中编写 int(*arr)[10] 而不是 int arr[][10] storeTables 函数,但我不想使用指针,只需使用 int arr[][10] 函数即可。请帮助我。`
当你这样做时,你正在数组之外写入。当您在函数中使用
arr[n]
时,n
将用作从 tables[1]
开始的索引。由于n==1
,这指的是不存在的tables[2]
。访问数组外部会导致未定义的行为。