*(*(a+i)+j)
本帖最后由 wwwheihei 于 2015-9-2 18:25 编辑怎么理解数组中 *(*(a+i)+j),哪位大神可以从内存角度分析?最好有图形解释?各位c高手请指点一下???为啥没人回答啊??????????? 调试看看,我也曾弄了好久,加油 purplenight 发表于 2015-9-3 00:53
调试看看,我也曾弄了好久,加油
结果是什么,怎么理解呢 本帖最后由 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 ]这个特殊的一维数组"
*/
} purplenight 发表于 2015-9-7 23:07
#include
void
大神理解通透啊!也就是说一个二维数组的元素相当于一个一维数组? 直接在vc6下编写几个一维数组或二维数组,以及数组与指针的,引用或者直接printf。
然后下断点调试分析, 看看明白多少 从内存角度分析 —— 看一下反汇编代码吧。{:7_140:} ~风介~ 发表于 2015-9-10 22:58
从内存角度分析 —— 看一下反汇编代码吧。
谢谢 {:10_250:}{:10_250:}谢谢大佬,看了好几遍,慢慢理解吧
页:
[1]