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]没有超出范围
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-01
C对数组的溢出是不检查的,数组名只以首地址的形式记录数组所对应的储存位置,引用的时候,不管怎么写也只是按照长度指向一段储存单位而已。
第2个回答  2013-10-01
上面两位网友说得都对,推荐你看一本书:C语言深度解剖
上面数组和指针一节关于这些讲得很清楚。

c语言三维数组问题
在C语言中,可以定义三维数组来存储和操作三维数据。三维数组是一种具有三个维度的数组,用于存储具有多个层次结构的数据。每个维度都有一个索引,用于访问数组中的特定元素。三维数组的基本概念 在C语言中,数组是一种用于存储相同类型元素的数据结构。三维数组是数组的扩展,它具有三个维度或层次。这对于...

三维数组怎么理解c语言
先理解二维数组,int a; 理解成3行4列。例如: 1 2 3 4 \/\/ 第1行 5 6 7 8 \/\/ 第2行 9 10 11 12 \/\/ 第3行。你可以理解成 行索引号 是直角坐标y值,列索引号 是直角坐标x值. 现在变3维 int a; 理解成深度(或高度)有2层的 3行4列 的数组。原来的 1 到 12 数值在 第一...

C语言中,a是一个三维数组,那么a+1是什么意思?
C语言中,a是一个三维数组,那么a+1是,这个三维数组中的第二个二维数组。这就好比用一个二维数组来表示一张表格。那么这个三维数组就由若干张表格组成,a+1就表示其中的第二张表格。

用C语言,动态三维数组
1、先说二维,可以这么理解:int n[3]有3个int那么,int m[5][3]有5个int[3]赋值时:n[1]=3把3给1号m[4]={5,9,4}m[4]是个int[3]类型,这么赋值,也就是这么赋值:m[4]的[0]是5:m[4][0]=5m[4][1]=9m[4][2]=4懂了吗?三维甚至更多维大同小异,比如int k[4][5...

c语言问题!!!
ACT_UP=0,ACT_DOWN,ACT_LEFT,ACT_RIGET };int Action( int &LoctionX, int &LoctionY, ACTION act ){ if( LoctionX==0 && LoctionY==1 ){ LoctionX=4;return 10;} int x=LoctionX;int y=LoctionY;switch(act){ case ACT_UP: y--;break;case ACT_DOWN:y++;break;case...

C语言矩阵输出,我创建了有一个三维数组,想四个一组的按二维数组输出,算 ...
由于数组在内存中是按顺序存储的,所以可以设置一个指向数组的指针,移动指针即可,每四位一行,可以对4取模,为0则换行!望采纳 include <stdio.h> include <stdlib.h> int main(void){ int arr[2][2][2] = {111,121,112,119,115,116,137,182};int *p = &arr[0][0][0];int iter...

C语言 三维数组初始化
1、第一步,需要定义数组。 数组的常见类型是int,float,char等,可以通过输入进行定义,见下图,转到下面的步骤。2、第二步,执行完上面的操作之后,数组的名称可以自定义,见下图,转到下面的步骤。3、第三步,执行完上面的操作之后,数组的大小是在数组定义阶段确定的,输入数字是数组的大小,见...

C语言 二维数组和三维数组
二维数组定义为数据类型 数组名[ROW][COL]。形象理解,二维数组如同表格,便于理解。下标从0开始。访问所有元素需双重循环,分别遍历行和列。二维数组内存分配与一维数组相同,都是从0开始的下标。初始化时,需按照数组的行数和列数给定元素值。遍历二维数组时,需用双重循环。三维数组定义为数据类型 数组...

C语言三维数组无法用指针打印出其内容
C语言中多维数组有两种存储方式,一种是按行排列,一种是按列排列,所以你不会知道编译器系统是基于按行排列还是按列排列的。这时,不能把多维数组简单地抽象为一个一维数组处理(如果你处理的正是一个一维数组就没有讨论的必要了)。如果出现这种情况,并且你一定要使用这种类似于一维数组的访问方式,...

C语言指针定义三维不规则数组
void check(int * * *ppp) {printf("三维数组Begin:{\\n");printf("{ %d,%d,\\n", ppp[0][0][0], ppp[0][0][1]);printf("%d,%d,%d,%d,\\n", ppp[0][1][0], ppp[0][1][1], ppp[0][1][2], ppp[0][1][3]);printf("%d,%d,%d,%d,%d },\\n", ppp[0][2]...

相似回答
大家正在搜