在多维数组中从 mid 调用数组

问题描述 投票:0回答:1
#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] 函数即可。请帮助我。`

arrays c function pointers multidimensional-array
1个回答
0
投票

当你这样做时,你正在数组之外写入。当您在函数中使用

arr[n]
时,
n
将用作从
tables[1]
开始的索引。由于
n==1
,这指的是不存在的
tables[2]
。访问数组外部会导致未定义的行为。

© www.soinside.com 2019 - 2024. All rights reserved.