C语言三维数组问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言三维数组问题相关的知识,希望对你有一定的参考价值。

int p[3][4][5];
  int *q=(int *)p;
  int(*s)[5]=&p[1][0];
  int i;
  for(i=0;i<60;i++)
  q[i]=i;
  //printf("%d\n",p[1][7][1]);
  //printf("%d\n",(*(s+1))[3]);
  printf("%d\n",p[1][7][1]*(*(s+1))[3]);
这个怎么理解定义int p[3][4][5];引用的时候p[1][7][1]没有超出范围吗?大神给个详细的指点

在c语言,数组存储空间是连续的,所以三维数组其实可以看成特殊的一维数组,p[3][4][5]可以看成p[3*4*5]的一维数组,因此p[1][7][1] = p[1*4×5+7*5+1] = p[56] 56<3*4*5=60 ,所以p[1][7][1]没有超出范围 参考技术A C对数组的溢出是不检查的,数组名只以首地址的形式记录数组所对应的储存位置,引用的时候,不管怎么写也只是按照长度指向一段储存单位而已。 参考技术B 上面两位网友说得都对,推荐你看一本书:C语言深度解剖
上面数组和指针一节关于这些讲得很清楚。

以上是关于C语言三维数组问题的主要内容,如果未能解决你的问题,请参考以下文章

三维数组

R语言基础-数组和列表

C语言数组为啥按行优先存储

java 三维矩阵

c++怎么用三维数组

HDU 5517 二维树状数组///三维偏序问题