求助大佬

孤远无梦 2020-02-22 06:08:25
为了区别数组指针与指向一维数组的指针,C++引入了行地址的概念,
并规定二维数组a中第i行地址用a+i或&a[i]表示。
行地址的值与行首地址的值是相同的,即a+i=&a[i]=a[i]=&a[i][0]
C语言里也是这样吗?
...全文
64 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤远无梦 2020-02-22
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
c里也一样
不过正如你所说,数组指针和指向一维数组的指针意思是不一样的,只是它们都指向自己同一个地址而已。a+i和&a[i]是数组指针,a[i]&a[i][0]



引用 2 楼 apkipa1 的回复:
从迂腐的角度来说,从来没有所谓行地址的说法(至少 C 语言没有)。所谓的行地址实质是指向数组的指针罢了,例如有 int a[3][5]; 则 a + 1 或者 &a[1] 指向 a 这个数组里的第二个元素,元素类型为 int[5],即 a + 1 的类型为 int(*)[5]。当然,也从来没有规定说 a[i] 的值和 &a[i] 的值相等,这是因为 a[i] 的类型为 int[5] (转换后为 int*),但 &a[i] 的类型为 int(*)[5],两个类型不兼容,自然不能保证它们的值相同(可惜的是,主流平台上所有指针的内部表示都完全一样,差异仅仅存在于文法层面)。



引用 3 楼 qybao 的回复:
按错键了,还没输完
继续补充,a[i]和&a[i][0]是指向1维数组的指针。
其实就是 *(a+i)==a[i]

好的,谢谢
qybao 2020-02-22
  • 打赏
  • 举报
回复
按错键了,还没输完 继续补充,a[i]和&a[i][0]是指向1维数组的指针。 其实就是 *(a+i)==a[i]
apkipa1 2020-02-22
  • 打赏
  • 举报
回复 1
从迂腐的角度来说,从来没有所谓行地址的说法(至少 C 语言没有)。所谓的行地址实质是指向数组的指针罢了,例如有 int a[3][5]; 则 a + 1 或者 &a[1] 指向 a 这个数组里的第二个元素,元素类型为 int[5],即 a + 1 的类型为 int(*)[5]。当然,也从来没有规定说 a[i] 的值和 &a[i] 的值相等,这是因为 a[i] 的类型为 int[5] (转换后为 int*),但 &a[i] 的类型为 int(*)[5],两个类型不兼容,自然不能保证它们的值相同(可惜的是,主流平台上所有指针的内部表示都完全一样,差异仅仅存在于文法层面)。
qybao 2020-02-22
  • 打赏
  • 举报
回复
c里也一样 不过正如你所说,数组指针和指向一维数组的指针意思是不一样的,只是它们都指向自己同一个地址而已。a+i和&a[i]是数组指针,a[i]&a[i][0]

69,371

社区成员

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

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