C语言常见问题与解答

4星 · 超过85%的资源 需积分: 13 2 下载量 183 浏览量 更新于2024-07-30 收藏 1.35MB PDF 举报
"C语言常见问题集 文字版" 本资源是一份关于C语言常见问题的集合,由Steve Summit原著,朱群英和孙云翻译,修订版为0.9.4,发布于2005年6月23日。该文档旨在解答C语言编程过程中可能遇到的各种疑问,涵盖声明和初始化、结构、联合和枚举等多个方面。 1.1 选择整数类型时,应考虑数值范围和效率,例如int通常用于一般计算,long int用于需要更大范围的整数,short int则用于节省内存。 1.2 在64位系统上,64位类型如long long int通常代表64位整数,但具体取决于编译器的实现。 1.3 全局变量和函数的定义应在所有使用它们的源文件之外,而声明则应在每个需要使用它们的文件顶部,用extern关键字进行。 1.4 extern在函数声明中表示该函数是在其他地方定义的,告知编译器该函数存在但不在当前文件中定义。 1.5 关键字auto在C语言中主要用于旧版本的函数作用域变量声明,现代C++中已经不再使用,但在C语言中仍然保留。 1.6 在C语言中,结构体可以包含指向自身的指针,问题可能在于typedef和结构体定义的使用方式不正确,需要正确地定义和声明typedef。 1.7 解析复杂声明的关键是自右向左读取,理解每个部分的作用,例如理解指针、数组和函数返回类型的嵌套。 1.8 如果函数只定义了一次,但编译器报非法重定义错误,可能是由于头文件包含了多次,使用#include guards或extern "C"来避免。 1.9 main()的合法定义通常是int main(void)或int main(int argc, char *argv[]),void main()不符合标准C。 1.10 未初始化的变量的值是不确定的,不能假设为零、空指针或浮点零。全局变量在未显式初始化时,其值可能是随机的。 1.11 字符串字面量不能直接赋值给局部数组,需要使用strcpy()或类似的函数。 1.12 malloc()分配的内存需要通过指针解引用后赋值,如*(p+0) = 's',或者使用strcpy()。 1.13 常量字符串字面量可以赋值给字符数组,但不能直接赋值给指针。对p[i]赋值会导致崩溃,因为字符串字面量是只读的。 1.14 函数指针的声明和初始化需要匹配函数的返回类型和参数列表,例如int (*func_ptr)(int, int) = some_function;。 2.1 声明struct x1{};定义了一个匿名结构类型,而typedef struct {} x2;创建了一个名为x2的类型别名。 2.2 struct x{}; x the_struct;是错误的,因为结构体类型需要命名,可以改为struct x {}; struct x the_struct;。 2.3 结构体可以包含指向自己的指针,这在实现递归数据结构或自引用结构时非常有用。 2.4 实现抽象数据类型通常通过结构体和一组操作这些结构体的函数来完成,保持结构体内部细节的隐藏。 2.5 C语言本身不支持面向对象特性,但可以通过结构体和函数指针模拟类和继承的概念。 这份问题集提供了C语言编程中许多常见问题的解答,对于初学者和有经验的程序员都是有价值的参考资源。