C语言问题集:常见疑问与解答

需积分: 0 1 下载量 12 浏览量 更新于2024-07-25 收藏 976KB PDF 举报
"495个C语言问题.pdf" 是一本关于C语言常见问题的集合,由Steve Summit原著,朱群英和孙云翻译。这本书包含495个不同的问题和解答,涵盖了C语言的基础到高级主题,如声明与初始化、结构、联合和枚举等。以下是部分章节的问题及知识点: 1. 关于整数类型的选择,C语言提供了多种整数类型(如int, short, long, long long),选择哪种类型取决于所需的数值范围和平台的位宽。64位机上的64位类型通常包括long和long long。 2. 全局变量和函数的声明应尽可能清晰明了,避免作用域和链接性的混淆。extern用于在文件间声明全局变量或函数,表明它们在其他地方被定义。 3. auto关键字在C语言中主要用于函数内部声明局部变量,但在现代C++和C中,大多数情况下可以省略不写,因为它是默认的存储类别。 4. 链表定义中,typedef可以简化指针类型的声明,但结构体包含指向自身的指针时,需要正确处理递归类型,确保编译器能理解类型定义。 5. 复杂声明的理解可以通过从右向左读取的方式来解析,例如,一个返回指向字符的指针的函数的指针数组,可以理解为"指向函数的指针",这个函数返回"指向字符的指针",并且该数组有N个元素。 6. main()函数的定义通常是int main(void),在某些编译器上void main()可能不被支持,标准C规定main()必须返回int类型。 7. 未初始化的变量其初始值是不确定的,全局变量在未明确初始化时不会自动设为零,而局部变量则没有默认值。对未初始化的指针进行操作可能导致程序崩溃。 8. 字符串字面量可以用两种方式赋值给字符数组:直接初始化(如char a[]="stringliteral";)和通过指针赋值(如char *p="stringliteral";)。但字符串字面量是只读的,直接修改p[i]会导致未定义行为。 9. 结构、联合和枚举是C语言中的复合类型。结构可以包含指向自身的指针,这在实现递归结构(如树)时很有用。typedef可以创建类型别名,使代码更易读,但使用时需要注意命名空间的冲突。 10. 抽象数据类型的实现通常涉及结构体和指针,通过将数据成员和操作封装在结构体内,实现数据的隐藏。C语言不具备直接的面向对象特性,但可以通过模拟实现,如使用函数指针和结构体。 11. 结构体可以包含一个长度可变的字符数组,如structname{int namelen; char namestr[1];},这种技巧常用于动态字符串。 以上是部分问题的关键知识点,实际书籍中对每个问题都提供了详细的解答和示例,帮助读者深入理解和解决C语言编程中遇到的实际问题。