飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 11468|回复: 21

感谢Nisy提权,特此发灌水文章一篇——有关数组寻址原理等!KR万岁~

  [复制链接]

该用户从未签到

发表于 2010-1-28 22:03:56 | 显示全部楼层 |阅读模式
咳咳...再发菜鸟博文一篇,有关数组寻址的(其实也是八辈子都用不着的东西)


很肤浅,也很容易,各位看官就当是酒饭后的笑谈吧!


看代码:


首先是一维数组的寻址

int main()

{

   int arry[10] = {1,2,3,4,5,6,7,8,9,10};

   return 0;

}


代码仅此而已,由于只是为了摸这数组寻址的原理和步骤,所以我就只写这点东西了,


调试,得知数组首地址为:0x0012ff58,如果我想知道他第1个元素的地址


那么依照公式:数组首地址+sizeof(type)*下标


代入各项的值可得如下公式: 0x0012ff58 + sizeof(int)*1

                           0x0012ff58 + 4*1

                           0x0012ff58 + 4

                           (8 + 4) = 12  转换成16进制 = C

所以由此可算出arry的第一个元素内存地址是:0x00ff12ff5c



然后是二维数组或者**数组的寻址了

看代码


int main()

{

   int arry[3][3] = {{1,2,3},{1,2,3},{1,2,3}};

   return 0;

}


我的天,我最讨厌的**数组,之所以讨厌**数组,是因为他绕来绕去,哎,没办法,也要理解他啊!


其实寻址方式和一维的一样


简单的来说吧


一维数组的寻址公式是:数组首地址 + sizeof(type)*数组下标


那么二维数组可以把前面的看成是后面的首地址


比方说数一维数组的首地址是arry, 现在有二维数组arry[3][3],那么我们把二维数组的首地址可以看成是arry[3],这就是他的首地址!


伪图示: 是不是这又变成了一维数组呢?

(arry[0])[3]

arry[0]  可以看成是数组名称

[3] 就是元素的个数了


根据上面的公式可以这样算:调式得知arry的首地址为:0x0012ff5c


数组存储首地址是第0个元素


所以可知 arry[0]的内存地址为0x0012ff5c


arry[0]里面有三个元素 ,那么根据公式 0x0012ff5c + sizeof(type)*下标

                                     0x0012ff5c + (4 * 3 = )12

                                     0x0012ff5c + c(12转换成16进制)

                                     0x0012ff68

那么就能得到arry[1]的地址为:0x0012ff68


再根据上面公式可以知道arry[2]的地址可算出:0x0012ff68 + sizeof(type)*下标

                                             0x0012ff68 + (4 * 3 = )12

                                             0x0012ff68 + c(12转换成16进制)

                                             0x0012ff74

那么就能得到arry[2]的地址为:0x0012ff74


有了上面的结果 我想算出arry[2][2]的内存地址,就有了如下的算法:


借用钱老师的一句名言“你管他什么,套公式就行了!”


数组首地址 + sizeof(type)*下标


上面算出了arry[2]的内存地址为 0x0012ff74


那么arry[2][2]就可以看成是一维数,arry[2]是数组名也就代表了首地址,


套公式:0x0012ff74 + 4 * 2

        0x0012ff74 + 8

        0x0012ff7c


由此可算出arry[2][2]的内存地址为:0x0012ff7c




哎,敲了好多东西哟,累死我了,眼睛都看花了~真累人撒~


哈哈~!!!!也算是陈述明白了?!本文转自我的博客!自己无聊就随便敲了点东西~如有错误,欢迎指正!

评分

参与人数 1威望 +8 飘云币 +8 收起 理由
whypro + 8 + 8 您的贴子很精彩,希望能再次分享!

查看全部评分

PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2010-1-28 22:06:35 | 显示全部楼层
沙发不留人,不知道灌水扣分不~
PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2017-5-31 13:17
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2010-1-29 00:24:39 | 显示全部楼层
    KR是什么呀,呵呵,灌的不是白开水就好了
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2010-1-29 00:57:23 | 显示全部楼层
    原帖由 cjteam 于 2010-1-29 00:24 发表
    KR是什么呀,呵呵,灌的不是白开水就好了



    一般人我不告诉他~~

    /:017 /:017 /:017
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-1-29 08:45:32 | 显示全部楼层
    对于‘数组’的理解 看‘加密与解密第三版’有提到过! 但似乎没楼主的复杂~

    这是对 ‘数组’进行运算吗?/:014
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-1-29 09:22:47 | 显示全部楼层
    原帖由 chstk 于 2010-1-29 00:57 发表



    一般人我不告诉他~~

    /:017 /:017 /:017

    去KR学习的现在应该技术很牛了
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-1-29 09:46:47 | 显示全部楼层
    LZ有希望做秦哥哥的首席小弟
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-12-12 11:23
  • 签到天数: 488 天

    [LV.9]以坛为家II

    发表于 2010-1-29 10:52:34 | 显示全部楼层
    KR应该是说的科锐吧/:001
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2017-3-9 21:22
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2010-1-29 11:41:19 | 显示全部楼层
    /:good /:good /:good
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2010-1-29 17:59:56 | 显示全部楼层
    原帖由 Alar30 于 2010-1-29 10:52 发表
    KR应该是说的科锐吧/:001




    /:017   /:017     答对 不过 +0分
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表