C语言常见问题与解答

需积分: 1 7 下载量 199 浏览量 更新于2024-07-24 收藏 1.35MB PDF 举报
"这495个C语言问题涵盖了许多C语言的基础和进阶概念,包括声明与初始化、结构、联合和枚举等方面。这些问题旨在帮助读者深入理解和掌握C语言的关键知识点。 1. 关于声明与初始化: - 整数类型的选用应根据实际需求,考虑存储空间和性能,如int、long int、short int等。 - 在64位系统上,64位类型通常为long或long long,具体取决于编译器和标准遵循。 - 全局变量和函数的定义与声明应在所有需要使用它们的文件中保持一致,通常在头文件中声明,在源文件中定义。 - extern用于在其他文件中声明已定义在别处的变量或函数。 - auto关键字在现代C语言中并不常用,主要用于旧代码中的局部变量声明。 - 结构体可以包含指向自身的指针,但需要注意递归引用可能导致的问题。 - 复杂声明的理解需要熟练掌握类型优先级和嵌套规则,可以通过反向解析来理解复杂声明的含义。 - 非法重定义通常是由于未正确包含头文件或使用了extern导致的。 - main()的正确定义通常是int main(void),void main()不遵循C标准。 - 未初始化的变量值是不确定的,不应依赖其默认值,全局变量的初值可能是零,但不是空指针或浮点零。 - 字符串字面量不能赋值给非const指针,因为它们是只读的。 - malloc返回的是未初始化的内存,需要手动赋值,不能直接初始化为字符串字面量。 - char a[]="stringliteral"是字符串字面量的副本,而char *p="stringliteral"是字符串字面量的引用,对p[i]赋值会导致未定义行为。 - 函数指针的声明和初始化涉及类型匹配,例如`typedef void (*func_ptr)(int); func_ptr my_ptr = my_function;`。 2. 结构、联合和枚举: - 声明struct x1{};和typedef struct {} x2;的区别在于,x1是结构类型名,x2是typedef后的别名。 - struct x{};之后的x the struct;是尝试实例化结构,但需要使用struct关键字,应写作struct x xthestruct;。 - 结构可以包含指向自身的指针,常用于自引用结构或链表节点。 - 实现抽象数据类型通常通过结构体和指向结构体的指针,隐藏实现细节。 - C语言不支持面向对象编程的特性,如继承和多态,但可以通过结构体和函数指针模拟一些类似概念。 - name{int namelen; char namestr[1];}是变长结构的例子,namestr可以存储任意长度的字符串,但需要动态分配。 以上只是问题集的一部分,完整的内容会更深入地探讨这些话题,帮助C语言学习者巩固基础,解决实际编程中遇到的问题。"