在C中类型化指向多维数组的指针

时间:2013-12-23 18:41:57

标签: c

# include <stdio.h>
# include <stdlib.h>
int main(int argc, char *argv[])
{
int a[5][10][2];
int *p;
p = (int(*)[10][2])p;//Gives error!
return EXIT_SUCCESS;
}

我想将类型转换为类型,以便它可以作为指向给定三维数组的指针吗?有没有办法这样做。我应用了一个想法,即变量的类型是除变量之外的所有内容名。

2 个答案:

答案 0 :(得分:3)

你为什么试图“强加”任何东西?为什么您希望(int(*)[10][2])的“类型转换”值与int *指针兼容?为什么您的原始代码会将p分配给p,完全忽略a

这是你可以做的

int a[5][10][2];
int (*p)[10][2] = a;

现在p是一个可用于访问a的指针,即p[i][j][k]相当于a[i][j][k]。没有必要的类型转换。

答案 1 :(得分:0)

如果你写p =(int(*)[10] [2])a;它不会给你任何错误,可能是一个警告。您认为p将转换为指向3-D数组的指针,这是错误的。分配到p。

后尝试此语句
printf("addresses %u   %u",p,p+1);

根据你的说法,输出应该类似于这个(让我们说)“地址9990000 99940000”,因为你认为p指的是3-D数组。但是你会得到类似于“地址9990000 9990004”,证明p是一个指向整数的指针。