二维数组中,首地址和0元素的地址有什么区别

napoleonpan 2003-08-18 09:53:56
定义一个二维数组啊a[n][n]
我看书上说*(a+i)是指第i行第0元素的地址,而a+i是指第i行的首地址,这两者地址值相同,那么有什么区别吗?
某行的首地址和此行的第0元素地址这两个概念都是各用在什么地方的?
书上没写明白,我也搞不清楚.
...全文
498 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
playboyxp 2003-08-19
  • 打赏
  • 举报
回复
地址是一样的
只是说法不同
lyr311 2003-08-18
  • 打赏
  • 举报
回复
当然有区别啊,一个是指向行的指针,一个是指向列的指针,我刚刚看到这里时候也搞不懂,往后面看就懂了——>如果你是用的谭浩强的书,两种指针数值上相当,意义不同,不能相互赋值,函数间传递参数时只能同类指针相匹配,否则会出错。
shiningpolarstar 2003-08-18
  • 打赏
  • 举报
回复
*(a+i)是指第i行第0元素的地址,而a+i是指第i行的首地址,这两者地址值相同,可是一个是可变的,一个不可变,或者说一个是"静态变量",一个"动态变量",如果是一维数组的话,a就是数组首地址,它是不可变的,而a+i,当i为零时,二者的值是一样的,可是随着i的变化a+i可以动态的指向数组中的每一个元素。
antijpn 2003-08-18
  • 打赏
  • 举报
回复
数组可以退化成为指针

所以:
假设这个数组存贮int型数据,那么这两个都是指针,但是一个是指向int型数据对象指针,一个是指向int型数据对象指针的指针
表示的话,一个是int *,一个是int **
napoleonpan 2003-08-18
  • 打赏
  • 举报
回复
*(a+i)并没有取值,*(*(a+i)+0)才是*(a+i)所取的值
napoleonpan 2003-08-18
  • 打赏
  • 举报
回复
奶油狗只是说明了取一个数组元素值的方法:a[i][j]=*(a[0]+i*col+j)
如果我说的两者没有太大区别,那总不至于在使用指向二维数组的指针时,a+i和*(a+i)通用吧
书上还说,a+i如果在前面加一个*,那么就由取它的行坐标转向求其列坐标(我的认为就是取小一级)
如果再在前面加一个&,(即&*(a+i))就是由取它的列坐标转向求它的行坐标(我就认为它取大一级)
tonybaobao 2003-08-18
  • 打赏
  • 举报
回复
a+i是第i行的首地址,也就是第i行首个元素的地址,*(a+i)应该是取值了吧!书上有点问题哦。
西江残月 2003-08-18
  • 打赏
  • 举报
回复
int a[10];

首地址a就是&a[0]啊,好像没什么区别吧!有些问题还是不要扣的太死,对吧?
fireseed 2003-08-18
  • 打赏
  • 举报
回复
是线性存储的

a[4][4]的存储方式:

a[0][0]
a[0][1]
a[0][2]
a[0][3]
a[1][0]
a[1][1]
a[1][2]
a[1][3]
a[2][0]
a[2][1]
a[2][2]
a[2][3]
a[3][0]
a[3][1]
a[3][2]
a[3][3]


a[2][3] = a + ( 2 * 4 + 3 )
vsfan 2003-08-18
  • 打赏
  • 举报
回复
至少值应该是一样的,概念么,就说不清了

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧