C语言常见问题与解答:Steve Summit的编程精华
需积分: 50 161 浏览量
更新于2024-08-02
收藏 1.34MB PDF 举报
"《你必须知道的495个C语言问题》是Steve Summit原著,由朱群英和孙云翻译的一本C语言问题解答集,包含了400多个C语言编程中常见的问题和解答,是学习和解决C语言问题的宝贵资料。本书的修订版为0.9.4,发布于2005年6月23日。"
在C语言中,声明和初始化是编程的基础,也是初学者常遇到的难点。以下是部分问题的解答:
1. 整数类型的选用应根据需求来决定,例如int用于一般计算,long int在需要更大范围时使用,short int则在内存有限时考虑。
2. 在64位机器上,64位类型如long int通常是64位宽,但具体取决于编译器和平台。
3. 全局变量和函数的最好定义方式是在相关的头文件中声明,源文件中定义,使用extern关键字在需要的地方引入。
4. extern在函数声明中表示该函数是在其他地方定义的,这里仅是告知编译器其存在。
5. 关键字auto在函数内部默认用于变量声明,但在现代C++中已不再常用,其作用主要是历史遗留。
6. C语言中,结构体可以包含指向自身的指针,但需要注意循环引用可能导致的问题。
7. 复杂声明的理解可以通过从右向左读取,例如一个数组的元素是返回字符指针的函数的指针。
8. 非法重定义通常是由于多次声明同名函数或变量而没有正确引入extern或重新定义。
9. main()函数的正确定义通常为int main(void),void main()不是标准C的写法。
10. 未初始化的变量的初始值是不确定的,不能假设它们为零、空指针或浮点零。全局变量通常会被自动初始化为零,但局部变量不会。
11. 字符数组需要指定大小,如intf(){chara[12]="Hello,world!";},这样才能正确存储字符串。
12. char *p=malloc(10)是动态分配内存,需要使用free释放,且初始化时应使用calloc或赋值,否则编译器无法识别其为字符串。
13. chara[]="stringliteral"是字符串字面量,可修改;char *p="stringliteral"是常量字符串,修改会导致未定义行为。
14. 函数指针的声明和初始化可以通过以下方式:typedefreturn_type(*pointer_name)(arg_types);然后使用pointer_name = function_address;进行初始化。
结构、联合和枚举也是C语言的重要组成部分:
2.1 声明struct x1{};定义了一个结构类型,typedef struct {} x2;创建了一个新的类型别名,两者在使用上有细微差异。
2.2 struct x{}; x theStruct;的错误在于漏掉了结构体类型名,正确形式是struct x theStruct;。
2.3 结构体可以包含指向自己的指针,形成递归结构,但需小心处理,避免无限循环引用。
2.4 实现抽象数据类型通常通过结构体和指针结合,将数据成员和操作封装,隐藏实现细节。
2.5 C语言不具备直接的面向对象特性,但可以通过结构体和函数指针模拟类和继承的概念。
本书中的问题涵盖了C语言的广泛主题,包括类型系统、内存管理、数据结构、控制流程、错误处理等,是深入理解和熟练掌握C语言的宝贵参考资料。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2012-04-23 上传
点击了解资源详情
点击了解资源详情
2024-12-25 上传