免费注册 查看新帖 |

Chinaunix

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

[C] 为什么判断结构体相等要这么复杂呢? [复制链接]

论坛徽章:
0
1 [报告]
发表于 2008-07-19 14:33 |显示全部楼层
原帖由 77h2_eleven 于 2008-7-19 14:24 发表
为什么不能直接 == 呢???

对于C语言来说,它的结构体名称其实只是代表它成员变量的第一个元素。
比如说

  1. struct sa
  2. {
  3. int a;
  4. char buf[10];
  5. };

  6. struct sa ss;

  7. 那么如果调用printf("%d\n", ss);与调用printf("%d\n", ss.a)的效果是一样的。
复制代码

所以不能够用这种方法来比较。

论坛徽章:
0
2 [报告]
发表于 2008-07-19 14:35 |显示全部楼层
而且结构体里面可能还有指针,你该如何判断两个指针是否相同,是根据指针所指向的内容来判断还是仅仅根据指针的值来判断。也是需要程序员自己来定义的。

论坛徽章:
0
3 [报告]
发表于 2008-07-19 20:41 |显示全部楼层
原帖由 THEBEST 于 2008-7-19 18:34 发表
你这个第一个元素是int没问题,但两个成员换个位置,用%s打印为什么就core呢?结构体名称只是代表它成员变量的第一个元素是个什么意思?


我是这样理解的, 结构体的名称只是代表这个结构体里面成员的第一个变量的基本类型, 也就是说对于前面那个结构体来说, 它仅代表一个 char 类型,
可以用 printf("%c\n", mm); 来打印出buf[0]出来, 但是却不能够打印出整个数组.

之所以core的原因是那条语句的作用就相当于是 char c = 'h'; printf("%s\n", c); 对一个char类型用%s的方式打印, 所以就出了问题.
当然, 我说的那种用法是不合法的. 应该避免.

论坛徽章:
0
4 [报告]
发表于 2008-07-19 22:21 |显示全部楼层
原帖由 mik 于 2008-7-19 22:09 发表


你的理解是错误的。

用你的例子来说:
struct sa
{
int a;
char buf[10];
};
struct sa ss;
printf("%d\n", ss); 与调用printf("%d\n", ss.a) 的效果是两码事,虽然在这里结果是一样。

用结构 ...


非常感谢. 学习了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP