C语言编程常见问题解答

需积分: 29 2 下载量 118 浏览量 更新于2024-07-27 收藏 1.34MB PDF 举报
"《你必须知道的495个C语言问题》是Steve Summit原著,由朱群英、孙云翻译的一本C语言问题集,包含了许多关于C语言声明、初始化、结构、联合和枚举等方面的问题解答。本书旨在帮助读者理解和解决C语言编程过程中可能遇到的各种挑战。" 在C语言中,声明和初始化是非常基础且重要的概念。以下是一些关键知识点: 1. 整数类型的选用:C语言提供了多种整数类型,如`int`, `short`, `long`, `long long`等。选择哪种类型取决于你需要存储的数值范围以及对性能和内存使用的考虑。 2. 64位机上的64位类型:在64位机器上,`long`通常为64位,但并非所有系统都遵循这一标准,因此应根据具体平台文档来确定。 3. 全局变量和函数的声明与定义:全局变量在所有函数中可见,而函数声明用于告知编译器函数的存在,定义则提供函数的实现。良好的编程习惯是在头文件中声明函数,在源文件中定义。 4. `extern`关键字:在函数声明前使用`extern`表示该函数的定义在其他地方,告诉编译器函数的实现不在当前作用域内。 5. `auto`关键字:在函数内部,默认的存储类就是`auto`,表示变量的作用域仅限于该函数。 6. 链表定义:在C语言中,结构体可以包含指向自身的指针,只是在声明时需要特别注意递归定义的方式。 7. 复杂声明的理解:通过从右向左读取声明,理解变量类型和其修饰符,可以解析复杂的声明,如指针、数组和函数组合的声明。 8. 函数定义与重定义:每个函数只能定义一次,多次定义会导致编译错误。`void main()`是不标准的,标准C规定`int main()`。 9. `main()`的定义:标准C中,`main()`的返回类型应为`int`,没有默认初始化。 10. 未初始化变量:未初始化的自动变量的值是不确定的,全局变量会默认初始化为0,但不保证是空指针或浮点零。 11. 字符串初始化:数组的大小必须至少能容纳字符串结束符`\0`,因此`char a[]="Hello,world!";`应该声明为`char a[]={"Hello,world!"};`。 12. 动态分配和初始化:`char *p=malloc(10);`仅分配空间,不初始化。要初始化,需用`strcpy(p, "string");`之类的函数。 13. 字符串字面量与指针:`char a[]="stringliteral";`是字符串常量,可以修改;`char *p="stringliteral";`是只读的,修改会导致未定义行为。 14. 函数指针的声明与初始化:声明函数指针后,可以通过函数名进行初始化,如`typedef int (*func_ptr)(int); func_ptr my_func = some_function;` 结构、联合和枚举方面: 15. 结构声明:`struct x1 {};`声明了一个结构类型,而`typedef struct {} x2;`创建了一个新的类型名`x2`。 16. 结构变量的声明:`struct x {} x;`是正确的,`x`是一个结构变量,而`x the struct;`是错误的语法。 17. 自指针结构:结构可以包含指向自身的指针,这在实现链表、树等数据结构时常见。 18. 抽象数据类型:通过结构体和指针,可以实现类似抽象数据类型的效果,隐藏实现细节。 19. 面向对象特性:C语言本身并不支持面向对象编程,但可以通过结构和函数指针模拟一些面向对象特性,如封装和消息传递。 以上仅是部分C语言问题的解答,完整书目中还包含更多关于指针、内存管理、预处理器、输入输出、错误处理等方面的深入讨论,对学习和提升C语言编程技能非常有帮助。