免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5813 | 回复: 17
打印 上一主题 下一主题

数组的首地址有什么说法吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-10 13:18 |只看该作者 |倒序浏览
下面这段代码  加上 "&" 编译时会有一个警告 但是可以编过,并且也可以输出aa
去掉"&"  就不会有警告了 但是仍然能输出aa

我记得数组好像有什么说法来的。数组首地址 与 用取地址符获得地址是一样的。

那位知道给确认一下呗。

  1. #include <stdio.h>

  2. int main()
  3. {
  4.         char tp[2][2];
  5.         strcpy(&tp[0], "aa");
  6.         printf("%s\n", tp[0]);
  7. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2008-09-10 13:21 |只看该作者
tp[0] 不就是一个char型数组吗?char型数组不就等价于一个char型指针,他的地址不就是&tp[0][0]

&tp[0]不也是&tp[0][0]

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
3 [报告]
发表于 2008-09-10 13:26 |只看该作者
&tp[0]相当于二维数组的首地址,是以二维数组的行大小为计数单位的

[ 本帖最后由 Godbach 于 2008-9-10 13:51 编辑 ]

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
4 [报告]
发表于 2008-09-10 13:27 |只看该作者
tp[0]本身也代表一个一维数组,他是以char为计数单位

[ 本帖最后由 Godbach 于 2008-9-10 13:50 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-09-10 13:39 |只看该作者
tp[0]类型          char  *
&tp[0] 类型       char  (*)[3]

论坛徽章:
0
6 [报告]
发表于 2008-09-10 13:43 |只看该作者
&是“的地址”的意思,&tp[0]就是tp[0]的地址,而tp[0]代表整个二维数组里面的一组,
楼主的代码

strcpy(&tp[0], "aa");

是把aa字符串和 tp[0]的地址 拷贝在一起,

而实际应该是拷贝到tp[0]里 ,当然出错了

[ 本帖最后由 insmile 于 2008-9-10 13:47 编辑 ]

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
7 [报告]
发表于 2008-09-10 13:44 |只看该作者
原帖由 zszjxh 于 2008-9-10 13:39 发表
tp[0]类型          char  *
&tp[0] 类型       char  (*)[3]


使得,这个地方可以用GDB会看得比较清楚,
一个是是指针,一个是数组指针

论坛徽章:
0
8 [报告]
发表于 2008-09-10 13:44 |只看该作者
原帖由 Godbach 于 2008-9-10 13:26 发表
&tp[0]相当于二维数组的首地址,是以整个二维数组大小为计数单位的

&tp[0]应该是以 char [3]为计数单位吧
tp[0]应该是以char为计数单位吧

论坛徽章:
0
9 [报告]
发表于 2008-09-10 13:47 |只看该作者
假设arr是个一个数组名
则arr代表指向数组第一个元素的指针
&arr代表指向整个数组的指针

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
10 [报告]
发表于 2008-09-10 13:50 |只看该作者
原帖由 zszjxh 于 2008-9-10 13:44 发表

&tp[0]应该是以 char [3]为计数单位吧
tp[0]应该是以char为计数单位吧


多谢指正。tp[0]确实是以char为单位。
&tp[0]应该是以二维数组中的行为单位,
(&tp[0]) + 1 = = &tp[1]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP