首页 热点资讯 义务教育 高等教育 出国留学 考研考公

哪位高手帮我讲讲三维数组和指针的用法{主要是普通指针样式和数组名式...

发布网友 发布时间:2024-12-23 05:11

我来回答

2个回答

热心网友 时间:5分钟前

C++ 的 三维数组 存放次序

假设你定义了这样一个三维数组
int a[2][3][4];

存储位置 下标1 下标2 下标3
001 0 0 0
002 0 0 1
003 0 0 2
004 0 0 3
005 0 1 0
006 0 1 1
007 0 1 2
008 0 1 3
009 0 2 0
010 0 2 1
011 0 2 2
012 0 2 3
013 1 0 0
014 1 0 1
015 1 0 2
016 1 0 3
017 1 1 0
018 1 1 1
019 1 1 2
020 1 1 3
021 1 2 0
022 1 2 1
023 1 2 2
024 1 2 3

int * p= (int *) a ;
可以将 三维数组强制转换成一维使用
p[i*(3*4)+j*4+k] == a[i][j][k]

a[i][j] 是一 有 4 个元素的一维数组的首地址
a[i] 是一 3 x 4 的二维数组的首地址

可作如下赋值

int * p = a[i][j];
此时 p 指向 a[i][j][0]的地址

不可以使用
int * p[4] =a[i];
可以用
int *p =(int *) a[i]; //强制类型转换

此时p 指向 a[i][0][0];

如果 int * p 指向 a[0][0][0] 的地址
取元素 a[i][j][k]可用下面的方式
p[ i*3*4 + j*4 + k]
*(p + i*3*4 + j*4 + k)

这种写法错误
cout<<*(*(*(p+i)+j)+k)<<endl;

p 指向 a[0][0][0] int 单元 的地址
p+i 指向 a[0][0][0] + i 个 单元的地址
*(p+i) a[0][0][0] + i 单元的 内容
*(p+i)+j a[0][0][0] + i 单元的 内容 +j
*(*(p+i)+j) 把 a[0][0][0] + i 单元的 内容 +j 作为地址 取内容
下边就不用说了吧 ,由此可以知道这种写法是错误的

热心网友 时间:5分钟前

一维数组当数轴,二维当直角x,y坐标,三维数组当立体x,y,z坐标。其实这些都不难,比如有个元素位置rui[8][7][5][4][7][1][7][1][0]你该怎样访问,搜索时应安顺序,左至右。它们就好比一窜密码。得从第一个开始。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com