int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int **p; p=(int**)a;

问题描述:

int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int **p; p=(int**)a; 其中p=(int**)a;是什么意思啊
1个回答 分类:综合 2014-10-30

问题解答:

我来补答
类型不匹配,才需要强制类型转换,更简单地说编译不过,强制转化就能编译过!
a 不是 int ** 类型的 ,虽然一维数组的数组名是一个指针 ,但是二维数组却不尽其然 ,因为它所指向的东西是有大小的 ,具体的来说 ,这个 a 是 int[3][3] 类型的 ,编译器需要知道要操作的单元的大小,
再问: 还是不明白啊。。。为什么是int** 为什么是两个*
再答: 因为二维数组的数组名相当于一个二级指针 这个你懂么?
再问: 这个懂得,但是这部之后要引用这个P的话是*(p+i*3+j)用这个操作的。。。那P不就是变成了一维的了,这是怎么回事啊
再答: 二维数组 可以理解为多个一维数组的集合 如int a【2】【3】就可以理解是2个含有3个元素的一位数组 理解时要先行后列 *(a+i)只是第几行的首元素地址 也就相当于这一位数组的首地址 *(a+i)+j 就是i行j列的元素的地址 而*(*(a+i)+j)才是i行j列的元素 我还是不太清楚你是那块不懂 把代码 粘贴出来吧
再问: 这个知道的呀,我问的是这个程序为什么p变成一维的了。。。我把整个程序给你吧 #includevoid main() { int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int i,j; int **p; p=(int**)a; for(i=0;i
 
 
展开全文阅读
剩余:2000
上一页:....详细步骤
下一页:望能尽快解答
也许感兴趣的知识