| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 788 人关注过本帖
标题:数组问题!!!求大虾!!!看不懂啊!!!!
只看楼主 加入收藏
apigboy
Rank: 1
等 级:新手上路
帖 子:35
专家分:4
注 册:2011-10-3
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:9 
数组问题!!!求大虾!!!看不懂啊!!!!
假设按照行优先存储整数数组A[9][3][5][8]时;第一个元素的字节地址是100,每个整数占4个字节。问下列元素的存储地址是:
a0000    a1111    a3125    a8247

搜索更多相关主题的帖子: 元素 
2011-10-07 15:55
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 楼主 apigboy
算术题,等会算一下

总有那身价贱的人给作业贴回复完整的代码
2011-10-07 16:06
apigboy
Rank: 1
等 级:新手上路
帖 子:35
专家分:4
注 册:2011-10-3
收藏
得分:0 
以下是引用embed_xuel在2011-10-7 16:06:38的发言:

算术题,等会算一下

谢谢啦~~帮忙算下顺便教教我怎么算啊~
2011-10-07 16:41
lansane
Rank: 2
等 级:论坛游民
帖 子:17
专家分:58
注 册:2011-5-19
收藏
得分:3 
A[9][3][5][8]中包含9个三维(3*5*8)数组,a0000的地址为100,a1000的地址为100+3*5*8*4-1=579
a2000的地址为100+2*3*5*8*4-1=1059;依次类推,看第一个三维数组,就是地址从100开始,可以看成b[3][5][8]首地址为100,所以b00地址为100.b100地址为100+5*8*4-1=259,b100的地址就相当于思维数组的a0100的地址。b200地址为100+2*5*8*4-1=419;即为a0200的地址。
算三维数组b[3][5][8]个元素地址时,把他看成一个有3个元素构成的数组,每个元素为5*8的二维数组。
个人理解,如有偏差请谅解
2011-10-07 17:40
ileelsai
Rank: 5Rank: 5
等 级:职业侠客
帖 子:87
专家分:303
注 册:2011-9-25
收藏
得分:0 
A[9][3][5][8]
a[x][y][z][w]
g(x,y,z,w)=x*3*5*8+y*5*8+z*8+w可算出按行存储位置其中0是第一位
地址的映像函数为loc(x,y,z,w)=loc(0,0,0,0)+4*g(x,y,z,w)
2011-10-07 21:15
ileelsai
Rank: 5Rank: 5
等 级:职业侠客
帖 子:87
专家分:303
注 册:2011-9-25
收藏
得分:5 
你可以用采用类似进制来理解
二进制: 1111 1111 ->十进制  你知道怎么算吧?上标不能写!!!
         7654 3210         
对A[9][3][5][8]可以理解为个位用8进制十位用5进制千位用3进制万位用9进制
以上采用十进制叫法,你懂的。。。
对于数组A[10][10][10][10][10][10][10][10][10][10]
    A[9][8][7][6][5][4][3][2][1][0]是数组的第几个存储?
           I think you know

[ 本帖最后由 ileelsai 于 2011-10-7 21:30 编辑 ]
2011-10-07 21:25
鸿飞冥冥
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:48
专家分:124
注 册:2011-8-14
收藏
得分:5 
a0000    a1111    a3125    a8247
100      776      1784     4416

a1111=(1*3*5*8+1*5*8+1*8+1)*4+100=776

a3125=(3*3*5*8+1*5*8+2*8+5)*4+100=1784

a8247=(8*3*5*8+2*5*8+4*8+7)*4+100=4416

程序代码:
# include <stdio.h>

int main (void)

{

   int a[9][3][5][8];

   printf ("a[0][0][0][0] = %d\na[1][1][1][1] = %d\na[3][1][2][5] = %d\na[8][2][4][7] = %d\n",
       &a[0][0][0][0],&a[1][1][1][1],&a[3][1][2][5],&a[8][2][4][7]);

   //四个数组元素在本机内存中的物理地址

   return 0;
}

图片附件: 游客没有浏览图片的权限,请 登录注册

1241412 - 1240736 + 100 = 776

1242420 - 1240736 + 100 = 1784

1245052 - 1240736 + 100 = 4416

实践出真知!

[ 本帖最后由 鸿飞冥冥 于 2011-10-7 23:16 编辑 ]

Sickcat
2011-10-07 23:01
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:2 
如果a0000的地址是100,a0001的地址是104,a0002的地址是108,那么ax的地址就是:x * 4 + 100,因为内存是线性的。

My life is brilliant
2011-10-07 23:22
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:5 
以下是引用apigboy在2011-10-7 15:55:23的发言:

假设按照行优先存储整数数组A[9][3][5][8]时;第一个元素的字节地址是100,每个整数占4个字节。问下列元素的存储地址是:
a0000    a1111    a3125    a8247
a0000
100

a[x1][x2][x3][x4] = 100 + (x1 * 3 * 5 * 8 + x2 * 5 * 8 + x3 * 8 + x4) * 4

a1111
100 + (1 * 3 * 5 * 8 + 1 * 5 * 8 + 1 * 8 + 1) * 4
= 100 + (120 + 40 + 8 + 1) * 4
= 100 + 169 * 4
= 100 + 676
= 776

a3125
100 + (3 * 3 * 5 * 8 + 1 * 5 * 8 + 2 * 8 + 5) * 4
= 100 + (360 + 40 + 16 + 5) * 4
= 100 + 421 * 4
= 100 + 1684
= 1784

a8247
100 + (8 * 3 * 5 * 8 + 2 * 5 * 8 + 4 * 8 + 7) * 4
= 100 + (960 + 80 + 32 + 7) * 4
= 100 + 1079 * 4
= 100 + 4316
= 4416

[ 本帖最后由 lz1091914999 于 2011-10-7 23:47 编辑 ]

My life is brilliant
2011-10-07 23:42
apigboy
Rank: 1
等 级:新手上路
帖 子:35
专家分:4
注 册:2011-10-3
收藏
得分:0 
谢谢大家了~
2011-10-08 06:53
快速回复:数组问题!!!求大虾!!!看不懂啊!!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.091931 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved