20170622_c语言研究六_李智宇 1

preview
需积分: 0 0 下载量 112 浏览量 更新于2022-08-08 收藏 99KB DOCX 举报
【C语言知识点详解】 在C语言中,理解变量的存储方式和内存布局是至关重要的。本文将基于提供的标题和描述中的“20170622_c语言研究六_李智宇 1”来深入探讨C语言中的几个关键知识点,包括变量的字节数、地址以及内存对齐。 我们要了解`sizeof`运算符。`sizeof`用于获取在内存中占用的字节数,无论是变量还是类型。例如,`sizeof(int)`会返回在当前系统上`int`类型占据的字节数。值得注意的是,`sizeof`运算符的结果是无符号整型`size_t`,它通常与`unsigned int`等价,但可能会根据不同的平台有所不同。 1. `sizeof`运算符的使用: - 对于变量,如`aint`,`sizeof(aint)`会返回`int`类型的字节数。 - 对于类型,如`float`,`sizeof(float)`会返回浮点数`float`的字节数,需用括号括起类型名,即`sizeof(float)`。 - 不适用于函数类型、不完全类型(如未声明大小的数组)和位字段。 2. 内存地址的获取: - 使用取址符`&`可以获取变量的内存地址,如`&aint`。 - 当需要打印内存地址的十六进制表示时,可以使用 `%p` 格式化字符串,但在某些系统上可能需要类型转换,例如 `(char far*)(&aint)`。 3. 字节的逐个查看: - 变量在内存中是按字节存储的,通过类型转换可以将其视为一系列字节。例如,将`int`指针转换为`char`指针,然后通过遍历每个字节来查看其内容。在给定的代码段中,`pchar1`、`pchar2`和`pchar3`就是这样操作的。 4. 结构体和内存对齐: - 在C语言中,结构体的成员会被按照一定的规则对齐,以提高访问效率。例如,结构体`stu`包含了`int`、`unsigned char`和字符数组等不同类型的成员,它们在内存中会按照特定的对齐方式进行排列,可能会有额外的填充字节。 5. 数组与指针的关系: - 当`sizeof`运算符应用于数组时,它返回整个数组的字节数,而不是首元素的地址。例如,对于一维数组,`sizeof(array)`将返回数组所有元素的总字节数。 6. 编译器差异: - 不同的编译器可能会处理指针和数组的不同。例如,Microsoft C/C++7.0 中的近指针和远指针的字节数就不同,而在大多数Unix系统中,指针通常为4字节。 7. 结构体的内存布局: - 结构体的成员大小可能不同,`sizeof`返回的是结构体总大小,包括了所有成员和可能的填充字节。例如,`stu`结构体的大小不仅包括所有成员的大小,还可能包含为了内存对齐而添加的额外字节。 通过这些示例程序,我们可以更深入地理解C语言中的数据类型、内存管理和`sizeof`运算符的用法。对于学习C语言的初学者来说,这些概念是理解和编写有效、高效代码的基础。
白小俗
  • 粉丝: 37
  • 资源: 302
上传资源 快速赚钱
voice
center-task 前往需求广场,查看用户热搜