[英]Point an array of pointers to an array of arrays
我试图指向一个数组数组(学习目的)。 我为此目的使用这一行:
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(我多次改变了这个问题,所以我指出了我在同一时间犯过的错误)
int (*ptr)[6][6];
将ptr
声明为指向6
元素的数组的指针,每个元素都是6
整数的数组(类型为int (*)[6][6]
)。 Now &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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.