黑马程序员技术交流社区
标题:
关于数组地址问题,望大家解惑
[打印本页]
作者:
wpf986530062
时间:
2015-10-16 13:09
标题:
关于数组地址问题,望大家解惑
地址是按字节加建的还是怎么算?比如定义一个数组int a [2]={1,2,3};它的首地址+1是第二个元素的地址,也就是四个字节占了一个地址,而二维数组int a [2][2]={1,2,3,4};它的行地址a[0]+1是第二行的首地址,两个地址差了sizeof(int)*列数个字节,这个到底是怎么算的,还是说与内存有关,各类变量存贮位置的地址长度不同?求大神解惑
作者:
chunjiang
时间:
2015-10-16 21:14
顶一个
作者:
豆豆是只喵
时间:
2015-10-16 22:14
受教了,感谢
作者:
knight_zfh1288
时间:
2015-10-16 22:27
一维数组地址=数组首元素的地址,数组指针+1,访问的是数组第二个元素,
数组指针的加减整数n,就是数组地址加减n个数组类型所占的字节数
二维数组地址,二维数组又可以看成是多个一维数组,所以二维数组的地址=第一个一维数组元素的地址=第一个一维数组的第一个元素的地址,比如arr[m][n],它的地址p=arr[0][n]的地址=arr[0][0]的地址
作者:
faceseagod
时间:
2015-10-16 22:31
和数组类型有关啦,按照类型来存储的
作者:
布鲁兹老爷
时间:
2015-10-16 22:52
先不说别的,你这个问题的描述里面就由错误了。
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 直接跨了一个数组到第二个数组。
作者:
wpf986530062
时间:
2015-10-17 22:48
3q3q,感谢大神们指点
作者:
CHENVICTORY
时间:
2015-10-17 23:13
可以,这个问题还是非常好的
作者:
陈昭燊
时间:
2015-10-18 07:44
看晕了,厉害厉害
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2