C语言笔试题目解析:比较与sizeof运算

需积分: 9 2 下载量 119 浏览量 更新于2024-07-29 收藏 300KB PDF 举报
"这篇资源包含了经典的C语言笔试题目,主要涉及C语言的数据类型、条件判断语句、指针以及sizeof运算符的使用。此外,还包含了一些关于C++编程的基础知识,如头文件的保护机制、包含指令的区别,以及const关键字的用途。" 在C语言中,正确的条件判断语句对于程序的逻辑至关重要。对于BOOL类型的变量flag,正确的与"零值"比较的if语句应该是`if(flag)`和`if(!flag)`,避免使用等于特定布尔值的比较,因为这不符合良好的编程风格。对于float类型的变量x,由于浮点数比较的不精确性,应使用一个极小的误差范围(如EPSILON)来判断接近零的情况,例如`if((x>=-EPSILON)&&(x<=EPSILON))`。至于char*类型的指针p,与"零值"比较的正确方式是`if(p==NULL)`和`if(p!=NULL)`。 在C++程序中,sizeof运算符用于获取数据类型或表达式所占用的内存大小。在函数`void Func(char str[100])`中,`sizeof(str)`等于4,因为在函数参数传递时,str被视为指针,因此其大小为指针的大小。对于字符串常量`char str[]="Hello"`,`sizeof(str)`等于6,包括字符串结束符'\0'。指针`char *p`的`sizeof(p)`始终为4,因为这是32位系统中指针的标准大小。整型变量`int n`的`sizeof(n)`也是4。在动态分配内存的场景中,`void *p=malloc(100);`,`sizeof(p)`依然为4,因为它代表的是指针的大小,而非分配的内存大小。 面试题的简答部分涉及到C/C++编程的一些基础概念: 1. ifndef/define/endif是预处理指令,用于防止头文件被多次包含。当头文件第一次被包含时,ifndef检查指定的宏是否已定义,如果没有则定义并执行后面的代码;如果已经定义,则跳过,从而避免重复包含导致的编译错误。 2. `#include<filename.h>`是标准包含,编译器会从标准库路径开始查找filename.h文件,通常用于系统提供的库头文件。而`#include“filename.h”`是局部包含,编译器从当前工作目录开始查找,适用于用户自定义的头文件。 3. const关键字有多重用途: - 定义常量:`const int a = 10;`使得a不可修改,提高代码的稳定性。 - 声明const指针:`int b = 20; const int *ptr = &b;`指针ptr指向的b不能通过ptr修改,但ptr本身可以改变。 - 声明指针为const:`int *const ptr = &b;`指针ptr指向的地址不能变,但b的值可以修改。 - 声明const成员函数:`class MyClass { void func() const; }`表示func函数不会修改对象的状态,有助于编译器进行优化和提高安全性。 以上内容涵盖了C语言和C++的基础知识,包括数据类型、条件判断、指针操作、内存管理和预处理指令的使用,是理解和掌握这两种语言的重要知识点。