C语言面试焦点:内存与指针
需积分: 10 47 浏览量
更新于2024-07-30
收藏 166KB PDF 举报
"C语言面试题,重点探讨C中内存和指针的运用,包括sizeof运算符,数组,结构体,联合体以及位段的理解。"
在C语言面试中,掌握内存管理和指针的运用至关重要,因为这是C语言的核心特性。下面我们将详细探讨这些知识点。
1. sizeof运算符:
sizeof运算符用于返回一个类型或变量在内存中占用的字节数。对于基本数据类型,如char、short、int,它们的大小通常是固定的:char为1字节,short为2字节,int为4字节(取决于编译器和平台)。在32位系统中,任何指针都为4字节,而在64位系统中则可能为8字节。数组的sizeof返回整个数组的大小,而不是指针的大小。例如,`sizeof(str)`会返回字符串数组的总字节数,包括终止符'\0'。而对于结构体,sizeof返回所有成员按照对齐规则排列后的总大小。例如,结构体`struct stu`的大小是12字节,因为int在内存中通常需要4字节对齐,导致在char和int之间有2个字节的空隙。
2. 结构体与内存对齐:
结构体成员在内存中的布局受到内存对齐的影响。如`struct teacher`的大小是8字节,因为char和char不需要对齐,但int需要4字节对齐,所以int后面有1个字节的空隙。
3. 联合体:
联合体的sizeof返回其所有成员中占用内存最大的那个成员的大小。在给定的例子中,`Union std`的大小是12字节,因为int数组比char数组占用的内存多。
4. 动态内存分配与指针:
动态分配的内存大小通过malloc等函数指定,而指针的sizeof始终返回4字节(在32位系统中)。例如,`void *p = malloc(100);`中,`sizeof(p)`仍然是4字节,即使它指向的内存区域可能是100字节。
5. 位段(Bit Fields):
在C语言中,位段允许我们定义结构体中的变量只占用特定数量的位。在提供的代码片段中,`struct bit`定义了三个位段,它们共享32位(4字节)。当将一个字节值(0x99)赋给位段的地址时,位段的值会被设置。位段的访问和赋值需要注意字节和位之间的转换,并且不同编译器可能会有不同的实现和对位段的处理方式。
面试中遇到这些问题时,不仅要理解概念,还要熟悉实际操作和内存布局。此外,了解C语言的内存管理,如栈和堆的区别,以及如何避免内存泄漏和野指针也是面试中的重要环节。熟练掌握这些知识点,能够显著提升你在C语言面试中的表现。
2021-10-01 上传
112 浏览量
170 浏览量
2021-10-01 上传
2022-10-30 上传
2021-10-01 上传
2021-10-10 上传
286 浏览量