C语言进阶指南:易错概念解析与特性总结

需积分: 1 0 下载量 78 浏览量 更新于2024-09-07 收藏 668KB DOC 举报
本篇C语言笔记主要总结了一些在学习过程中容易混淆或出错的概念,包括关键字、存储类别、数据类型和特性。以下是详细的知识点: 1. **Static** 存储类别:在C语言中,`static`修饰的局部变量存储在程序的静态存储区,生命周期贯穿整个程序,即使函数结束也不会被销毁。 2. **Function1 和 Function2**:`Function1`可能是指的局部变量的`static`存储类别,而`Function2`通常指的是具有文件作用域的标识符,这些标识符在整个源文件范围内可见。 3. **Register** 类型:`register`关键字请求将变量存储在CPU寄存器,但编译器可能不会保证实现。变量应满足特定条件,如能被寄存器接受,并且不能使用`&`运算符获取其地址。 4. **Void指针**:`void*`是一种通用指针类型,可以指向任何类型的变量。它作为左值时,可以用来接收不同类型的指针,作为右值则用于强制类型转换。但不能直接存储实际数据。 5. **Extern** 关键字:`extern`用于指示变量或函数的定义不在当前作用域内,编译器会寻找全局或外部定义。 6. **Sizeof** 运算符:非函数的内置运算符,用于获取数据类型或变量所占内存的大小,其值在编译期间确定。 7. **Const** 关键字:用于声明常量和只读数组,编译器确保它们在运行时不被修改。不同类型const的指针权限也有所不同,如`constint*constpp`表示指针本身不可变但指向的内容可变。 8. **Volatile** 关键字:用于标记可能被多线程访问或受未知因素影响的变量,要求编译器每次访问都要重新从内存获取。 9. **Struct 和 Union** 结构体和联合体:结构体用于组合不同数据类型,每个成员独立分配空间,而联合体共享最大域的空间。结构体中的数组可以有柔性大小。 10. **Enum** 枚举类型:自定义类型,枚举常量默认连续编号。枚举变量只能取预定义的离散值,与宏定义`#define`的区别在于枚举有类型信息且常量是真正的常量。 11. **Typedef**:`typedef`用于重定义类型,但它不像`#define`那样进行文本替换,而是创建新的类型名,且不支持类型转换的扩展。 通过这篇笔记,学习者可以更好地理解和记忆C语言中的这些核心概念,避免常见的错误和混淆。