【发布时间】:2014-07-06 20:06:48
【问题描述】:
我有一个函数,它返回一个 3-d 整数数组作为指向其中第 0 个 2-D 数组的第 0 个 1-D 数组的指针。它的尺寸为2*3*4。这是我的功能:
int (*ultimate())[4] {
int a[2][3][4] = {
{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
},
{
{13,14,15,16},
{17,18,19,20},
{21,22,23,24}
}
};
return (int (*)[4]) a;
}
我以两种不同的方式使用此功能:
在第一种方法中,我将指针指向一维数组,看到有 6 个这样的数组,逐个打印出来:
int (*q)[4];
q = ultimate();
for (int i = 0; i < 2*3; i++) {
printf("\n");
for (int k = 0; k < 4; k++) {
printf("%d ",*(*(q+i)+k));
}
}
在下一个方法中,我只是简单地使用返回值来获取3-D数组中第一个元素的地址,然后打印全部:
int *p;
for (int i = 0; i < 2; i++) {
p = (int *) (q+i*3);
pnl();
for (int j = 0; j < 3; j++) {
for (int k = 0; k < 4; k++) {
printf("%d",*p);
p++;
}
}
}
但是,在这两种情况下,我都会得到垃圾值。在第一种方法中,我得到了数组的一些行,而其他值是垃圾,而在第二种方法中,所有值都是垃圾。知道我哪里错了吗?
【问题讨论】:
-
你可以写
q[i][k],而不是*(*(q+i)+k))。 (IDK 其他人如何发现您的版本更具可读性)
标签: c arrays pointers multidimensional-array