A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

地址是按字节加建的还是怎么算?比如定义一个数组int a [2]={1,2,3};它的首地址+1是第二个元素的地址,也就是四个字节占了一个地址,而二维数组int a [2][2]={1,2,3,4};它的行地址a[0]+1是第二行的首地址,两个地址差了sizeof(int)*列数个字节,这个到底是怎么算的,还是说与内存有关,各类变量存贮位置的地址长度不同?求大神解惑

8 个回复

倒序浏览
顶一个            
回复 使用道具 举报
受教了,感谢
回复 使用道具 举报
一维数组地址=数组首元素的地址,数组指针+1,访问的是数组第二个元素,
数组指针的加减整数n,就是数组地址加减n个数组类型所占的字节数
二维数组地址,二维数组又可以看成是多个一维数组,所以二维数组的地址=第一个一维数组元素的地址=第一个一维数组的第一个元素的地址,比如arr[m][n],它的地址p=arr[0][n]的地址=arr[0][0]的地址
回复 使用道具 举报
和数组类型有关啦,按照类型来存储的
回复 使用道具 举报
先不说别的,你这个问题的描述里面就由错误了。

int a [2][2]={1,2,3,4};

首地址a[0]是第一行的首地址也是数组的首地址。  a[0] + 1是 a[0][1]的地址,根本不是什么第二行的首地址。
a[1]或者 a[0] + 2 才是第二行的首地址。

不信你自己输出一下。

每个数组都有两个元素,所以每个数组在内存中存储8个字节。你每次用首地址+1,加的就是数组的类型Int 4个字节。而不是你说的 首地址 + 1 直接跨了一个数组到第二个数组。
回复 使用道具 举报
3q3q,感谢大神们指点
回复 使用道具 举报
可以,这个问题还是非常好的
回复 使用道具 举报
看晕了,厉害厉害
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马