鱼C论坛

 找回密码
 立即注册
查看: 6243|回复: 8

*(*(a+i)+j)

[复制链接]
发表于 2015-9-2 08:41:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 wwwheihei 于 2015-9-2 18:25 编辑

怎么理解数组中       *(*(a+i)+j),哪位大神可以从内存角度分析?最好有图形解释?各位c高手请指点一下???为啥没人回答啊???????????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-3 00:53:45 From FishC Mobile | 显示全部楼层
调试看看,我也曾弄了好久,加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-7 15:55:45 | 显示全部楼层
purplenight 发表于 2015-9-3 00:53
调试看看,我也曾弄了好久,加油

结果是什么,怎么理解呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-7 23:07:21 | 显示全部楼层
本帖最后由 purplenight 于 2015-9-10 23:22 编辑

#include    <stdio.h>

void
main() {
    char   a[3][10] = {"Red", "Green", "Purple"};
       /*我们可以把二维数组看作是一种特殊的一维数组
                               它的元素又是一个一维数组
       /*     总结
        * 1.一维数组a[n],  a+i里的i.
        *         若int  a[n], a+1== 数组首地址 + 1个sizeof(int) == 4字节
        *                                                  i==1   1个sizeof(int)== ...
        *                                                  i==2   2个sizeof(int)==  2*4字节
        *        若char a[n], a+1== 数组首地址 + 1个sizeof(char) == 1字节
        *        printf("%d\n", *(a+i)); 取出地址a+i的值
        *
        * 2.二维数组a[n][m], a+i的i.
        *        i取值为1, a+i == a+1
        *        若int  a[n][m],  a+1== 数组首地址+ 1个sizeof(a[n])== 1 * m * sizeof(int)  == 4m字节
        *                                                      i==1    1个sizeof(a[n])== ...
        *                                                      i==2    2个sizeof(a[n])== 2 * m * sizeof(int) == 2* 4m字节
        *        若char a[n][m],  a+1== 数组首地址+ 1个sizeof(a[n])== 1 * m * sizeof(char) == m字节
        *        printf("%d\n", *(a+i)); 取出地址a+i( a[i], i=0,1,2,...n-1 )的值
        *
        *   二维数组a[3][10]看作特殊的一维数组a[3]
        *    (a+0)数组元素a[0]的地址
        *         *(a+0)取出a[0]的值
        *                           a[0]的元素又是一个一维数组
        *               因此*(a+0)取出的就是这个一维元素的首地址
        *               那么*(a+0)+0表示:    (提示: 一维数组a[n]中, a+0数组元素a[0]的地址)
        *                                            :一维数组的0号数组元素的地址
        *                      *(a+0)+1表示一维数组的1号数组元素的地址
        *                                  这里的一维数组是a[0]这个特殊的一维数组
        *    (a+1)数组元素a[1]的地址
        *                      *(a+1)+1表示一维数组的1号数组元素的地址
        *                                  这里的一维数组是a[1]这个特殊的一维数组
        *    (a+2)数组元素a[2]的地址
        *                      *(a+2)+1表示一维数组的1号数组元素的地址
        *                                  这里的一维数组是a[2]这个特殊的一维数组
        *     "             *( *(a+i)+j)表示一维数组的j号数组元素的地址上的数据取出
        *                                  这里的一维数组是a[ i ]这个特殊的一维数组  "
        */                          

}

评分

参与人数 1荣誉 +5 鱼币 +10 收起 理由
~风介~ + 5 + 10 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2015-9-10 15:16:42 | 显示全部楼层

大神理解通透啊!也就是说一个二维数组的元素相当于一个一维数组?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-10 18:28:26 | 显示全部楼层
直接在vc6下编写几个一维数组或二维数组,以及数组与指针的,引用或者直接printf。
然后下断点调试分析, 看看明白多少
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-10 22:58:16 | 显示全部楼层
从内存角度分析 —— 看一下反汇编代码吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-10 23:26:14 | 显示全部楼层
~风介~ 发表于 2015-9-10 22:58
从内存角度分析 —— 看一下反汇编代码吧。

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-23 21:10:51 | 显示全部楼层
谢谢大佬,看了好几遍,慢慢理解吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-29 14:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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