C语言笔试题解析:位操作与结构体

需积分: 9 1 下载量 161 浏览量 更新于2024-07-27 6 收藏 241KB PDF 举报
笔记作者总结的C语言常见笔试题及答案 在这份资源中,作者分享了几个关于C语言的笔试题目及其解答,涵盖了指针、位字段(bit field)以及结构体等方面的知识点。 1. 题目1涉及指针和地址的概念。程序首先定义了一个整型变量`a`和一个指向`a`的指针`p`。然后,`*p`赋值为0x500,即十进制的131072。接着,`a=(int)(*(&p))`和`a=(int)(&(*p))`分别将`p`的地址转换为整型赋给`a`。由于`p`本身就是`a`的地址,所以`a`和`p`的值是相等的,因此程序输出"equal!"。 2. 题目2探讨了位字段(bit field)和结构体的使用。`sizeof(bits)`是一个正确的表达式,它返回结构体`bits`所占用的内存大小。在原始定义下,由于`bits`被当作一个变量,定义是错误的。正确的做法是使用`typedef`定义一个名为`bits`的结构体类型。修正后的结构定义不会改变`sizeof(bits)`的正确性,其值为4个字节,因为每个`int`占用4字节,尽管实际上只使用了8位。如果将`int`类型改为`char`(通常占1字节),`sizeof(bits)`的大小将变为1,这是因为每个`char`类型的位字段占用1字节,但实际大小可能会因编译器和环境而异。 3. 题目3考察的是位字段的限制。在C语言中,位字段的成员必须是变量名,而不是数组的形式,因此`unsigned int a[0]:1,a[1]:1,...,a[7]:1;`是不正确的。正确的做法是定义一系列独立的位字段,如`unsigned int a0:1, a1:1, a2:1, ..., a7:1;`。 这些题目展示了C语言中的一些核心概念,包括指针操作、位字段的使用以及结构体的定义。理解这些知识点对于深入学习C语言至关重要,它们涉及到内存管理、数据表示和类型系统。在准备C语言的面试或笔试时,熟悉这类问题的解法能够帮助提升对语言特性的掌握。