# 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;
}
我想将类型转换为类型,以便它可以作为指向给定三维数组的指针吗?有没有办法这样做。我应用了一个想法,即变量的类型是除变量之外的所有内容名。
答案 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是一个指向整数的指针。