C++笔试实例分析
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
编辑: 面试网 发布时间: 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” 标志打开文件;
移植性更好的方案是写一对函数, 用可移植(可能甚至是人可读) 的方式按域读写结构, 尽管开始可能工作量稍大。
【C++笔试实例分析】相关文章:
华为C++笔试题11-23
联想C++笔试题11-23
Sony C++笔试题12-19
C++笔试实例:int *p=NULL和*p= NULL有什么区别12-19
C++笔试题目分享12-20
华为c/c++笔试题12-19
北承笔试题目(C++)12-23
聚网科技C++笔试题12-18