将指针数组指向数组数组
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
数组。它是int
s 的二维数组。
@H2CO3;请不要那样做。他肯定会感到困惑。
@hacks 是的。但这就是他所要求的......:P
【参考方案1】:
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
【讨论】:
从技术上讲,如果Arr
也是整数数组的数组,例如int Arr[X][6][6]
,这也是一项合法的任务。
@JoachimPileborg;在那种情况下,我认为Arr
将是合法的分配。
我如何输入ptr?
您可以通过(*ptr)[i][j]
完成此操作。
好的,我将在问题的另一个编辑中展示我尝试过的内容。但它没有工作..以上是关于将指针数组指向数组数组的主要内容,如果未能解决你的问题,请参考以下文章