将指针数组指向数组数组

Posted

技术标签:

【中文标题】将指针数组指向数组数组【英文标题】:Point an array of pointers to an array of arrays 【发布时间】:2014-01-03 22:30:23 【问题描述】:

我试图指向一个数组数组(学习目的)。我为此目的使用这条线:

int Arr[6][6];    
int (*ptr)[6][6];
ptr = &Arr;

这是正确的吗? (编辑:我打算使用一个指向 6x6 数组的指针。另外,考虑到我希望输入并打印出来,哪种声明更好?指针数组还是指向 6x6 数组的指针?)

接下来,

(“使用指针读取和打印二维数组”的代码完全是一团糟,这就是为什么我不会在这里展示它。)

我想使用 scanf 和 printf 通过 ptr 获取输入(应该将其分配给 Arr),然后打印 Arr 和 ptr 以查看语法(以及它是否有效)。显然两个打印的数组应该是一样的。

我应该使用什么语法?这非常令人困惑,我希望这能帮助我更好地学习。

通过指针读取和打印:

for (i = 0; i < 6; i++)


    printf_s("\nEnter values for row %d (Enter 0 for 1-1, 2-2 etc.:\n", i + 1);
    for (j = 0; j < 6; j++)
    
        printf_s("Row %d Column %d", i + 1, j + 1);
        scanf_s("%d", &(*ptr)[i][j]); ........(ptr)[i][j] doesn't allocate to Arr correctly
    

for (i = 0; i < 6; i++)
    
        printf_s("\n");
        for (j = 0; j < 6; j++)
        
            printf_s("%d\t", (*ptr)[i][j]); .........*(ptr)[i][j] is wrong because it dereferences the whole 2D array.
        
    

致谢:hacks (我多次更改问题,所以我指出我在同一期间犯的错误)

【问题讨论】:

为什么不能看到Arr的声明?许可问题? 指针数组:T *arr[size];;指向数组数组的指针数组:T (*arr[size])[width][length]. @user3138129;不..Arr 不仅仅是一个int 数组。它是ints 的二维数组。 @H2CO3;请不要那样做。他肯定会感到困惑。 @hacks 是的。但这就是他所要求的......:P 【参考方案1】:

int (*ptr)[6][6];ptr 声明为指向6 元素数组的指针,每个元素都是6 整数数组(int (*)[6][6] 类型)。现在&amp;Arr 也是int (*)[6][6] 类型,你的赋值是合法的。 在您的scanf_s 参数中,您缺少&amp;。这应该是

scanf_s("%d", &(*ptr)[i][j]);  

注意(*ptr)[i][j]int 类型。就像Arr[i][j]。要将值存储到Arr[i][j],您需要&amp;,类似地&amp; 用于存储值(*ptr)[i][j]

查看更正后的程序:

#include <stdio.h>
#include <stdlib.h>

int main(void)

    int Arr[6][6];
    int (*ptr)[6][6];
    ptr = &Arr;

    for (int i = 0; i < 6; i++)
    
        printf("\nEnter values for row %d (Enter 0 for 1-1, 2-2 etc.:\n", i + 1);
        for (int j = 0; j < 6; j++)
        
            printf("Row %d Column %d: ", i + 1, j + 1);
            scanf("%d", &(*ptr)[i][j]);

        
    
    for (int i = 0; i < 6; i++)
    
        for (int j = 0; j < 6; j++)
            printf("%d\t", (*ptr)[i][j]);
        printf("\n");
    

    

输出: http://ideone.com/q6BQ61

【讨论】:

从技术上讲,如果 Arr 也是整数数组的数组,例如int Arr[X][6][6],这也是一项合法的任务。 @JoachimPileborg;在那种情况下,我认为Arr 将是合法的分配。 我如何输入ptr? 您可以通过(*ptr)[i][j] 完成此操作。 好的,我将在问题的另一个编辑中展示我尝试过的内容。但它没有工作..

以上是关于将指针数组指向数组数组的主要内容,如果未能解决你的问题,请参考以下文章

怎么让一个二维指针指向一个二维数组

指向指针数组和指针数组的指针之间的区别[重复]

指针和数组

C语言指向二维数组的指针

如何将指向c数组的指针转换为python数组

指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针