C++笔试实例分析

进修社 人气:2.56W

声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同

C++笔试实例分析

编辑: 面试网 发布时间: 2013-10-19  第一种形式声明了一个“结构标签”; 第二种声明了一个“类型定义”。主要的区别是在后文中你需要用“struct x1” 引用第一种, 而用“x2” 引用第二种。也就是说, 第二种声明更像一种抽象类新—– 用户不必知道它是一个结构, 而在声明它的实例时也不需要使用struct 关键字。

是否有自动比较结构的方法

没有。编译器没有简单的好办法实现结构比较(即, 支持结构的== 操作符),这也符合C 的`低层特性。简单的按字节比较会由于结构中没有用到的“空洞” 中的随机数据(参见问题2.10) 而失败; 而按域比较在处理大结构时需要难以接受的大量重复代码。如果你需要比较两个结构, 你必须自己写函数按域比较。

如何向接受结构参数的函数传入常数值

传统的C 没有办法生成匿名结构值; 你必须使用临时结构变量或一个小的结构生成函数。

C99 标准引入了“复合常量” (compound literals); 复合常量的一种形式就可以允许结构常量。例如, 向假想plotpoint() 函数传入一个坐标对常数, 可以调用plotpoint((struct point){1, 2});与“指定初始值” (designated initializers) (C99 的另一个功能) 结合, 也可以用成员名称确定成员值:plotpoint((struct point){.x=1, .y=2});

怎样从/向数据文件读/写结构

用fwrite() 写一个结构相对简单:

fwrite(&somestruct, sizeof somestruct, 1, fp);对应的fread() 调用可以再把它读回来。但是这样写出的文件却不能移植(参

见问题2.10 和20.3)。同时注意如果结构包含任何指针, 则只有指针值会被写入文件, 当它们再次读回来的时候, 很可能已经失效。最后, 为了广泛的移植, 你必须用“b” 标志打开文件;

移植性更好的方案是写一对函数, 用可移植(可能甚至是人可读) 的方式按域读写结构, 尽管开始可能工作量稍大。

TAGS:笔试 实例