wwwheihei 发表于 2015-9-2 08:41:02

*(*(a+i)+j)

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

怎么理解数组中       *(*(a+i)+j),哪位大神可以从内存角度分析?最好有图形解释?各位c高手请指点一下???为啥没人回答啊???????????

purplenight 发表于 2015-9-3 00:53:45

调试看看,我也曾弄了好久,加油

wwwheihei 发表于 2015-9-7 15:55:45

purplenight 发表于 2015-9-3 00:53
调试看看,我也曾弄了好久,加油

结果是什么,怎么理解呢

purplenight 发表于 2015-9-7 23:07:21

本帖最后由 purplenight 于 2015-9-10 23:22 编辑

#include    <stdio.h>

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

}

wwwheihei 发表于 2015-9-10 15:16:42

purplenight 发表于 2015-9-7 23:07
#include   

void


大神理解通透啊!也就是说一个二维数组的元素相当于一个一维数组?

purplenight 发表于 2015-9-10 18:28:26

直接在vc6下编写几个一维数组或二维数组,以及数组与指针的,引用或者直接printf。
然后下断点调试分析, 看看明白多少

~风介~ 发表于 2015-9-10 22:58:16

从内存角度分析 —— 看一下反汇编代码吧。{:7_140:}

purplenight 发表于 2015-9-10 23:26:14

~风介~ 发表于 2015-9-10 22:58
从内存角度分析 —— 看一下反汇编代码吧。

谢谢

meltemi 发表于 2018-3-23 21:10:51

{:10_250:}{:10_250:}谢谢大佬,看了好几遍,慢慢理解吧
页: [1]
查看完整版本: *(*(a+i)+j)