原帖由 MMMIX 于 2008-7-19 14:40 发表
其实最真实的原因是无法对结构体比较提供高效的实现。在 C 中,结构体可能有填充位,这些填充位的值是未定义的,因此结构体的比较就只能是逐个比较其成员,而这种比较方式的效率是很低的(例如碰到很大的结构体 ...
原帖由 erqb 于 2008-7-19 15:45 发表
你碰到这个需求了,就提出了这个疑问。我想你的设计有问题或不合理。
C语言每次加入新东西时都很谨慎,新东西加入C前必须考虑其是否实用,是否符合常理,是否符合人的思维习惯,所以C语言非常精炼,没有丝毫杂 ...
原帖由 erqb 于 2008-7-19 16:08 发表
给你纠正一下,“存在是必然”是对的,“存在即是合理”是错的,呵呵,学东西了吧。
“c++的设计者的编程经验比你的年龄还要长”不是我不可以批判C++的理由吧,呵呵,又学东西了吧。
原帖由 MMMIX 于 2008-7-19 16:10 发表
嗯,就是这么个意思。当然,在具体实现的时候编译器完全可以根据具体 cpu 提供的指令进行优化(如直接生成实现此功能的汇编指令),像 memcpy 这种函数一般都是经过高度优化的,在某些情况下直接就是用汇编写的。
原帖由 scutan 于 2008-7-19 14:33 发表
对于C语言来说,它的结构体名称其实只是代表它成员变量的第一个元素。
比如说
struct sa
{
int a;
char buf[10];
};
struct sa ss;
那么如果调用printf("%d\n", ss);与调用printf("%d\n", ss.a ...
原帖由 THEBEST 于 2008-7-19 18:34 发表
你这个第一个元素是int没问题,但两个成员换个位置,用%s打印为什么就core呢?结构体名称只是代表它成员变量的第一个元素是个什么意思?
原帖由 scutan 于 2008-7-19 20:41 发表
我是这样理解的, 结构体的名称只是代表这个结构体里面成员的第一个变量的基本类型, 也就是说对于前面那个结构体来说, 它仅代表一个 char 类型,
可以用 printf("%c\n", mm); 来打印出buf[0]出来, 但是却不能 ...
原帖由 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) 的效果是两码事,虽然在这里结果是一样。
用结构 ...
原帖由 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) 的效果是两码事,虽然在这里结果是一样。
用结构 ...
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |