指向一个数组数组的指针数组

时间:2014-01-03 22:30:23

标签: c arrays pointers 2d

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

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

这是对的吗? (编辑:我打算使用指向6x6数组的指针。另外,考虑到我希望接受输入并将其打印出来,哪种声明更好?指针数组或指向6x6数组的指针?)

接下来,

(“使用指针读取和打印2d数组”代码完全混乱,这就是为什么我不会在这里显示它。)

我想使用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.
        }
    }

致谢:haccks (我多次改变了这个问题,所以我指出了我在同一时间犯过的错误)

1 个答案:

答案 0 :(得分:3)

int (*ptr)[6][6];ptr声明为指向6元素数组的指针,每个元素都是6整数数组(类型为int (*)[6][6])。现在&Arr也是int (*)[6][6]类型,您的作业是合法的 在您的scanf_s参数中,您遗漏了&。这应该是

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

请注意,(*ptr)[i][j]属于int类型。它就像Arr[i][j]。要将值存储到Arr[i][j],您需要&,此处类似&用于存储值(*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