C 语言常见问题集
原著:Steve Summit
翻译:朱群英, 孙 云
修订版 0.9.3, 2005 年 5 月 18 日
版权所有
c
° 2005
前言
本文从英文 C–FAQ (2004 年 7 月 3 日修订版) 翻译而来。本文的中文版权为
朱群英和孙云所有。本文的内容可以自由用于个人目的,但是不可以未经许可出
版发行。英文版权为 Steve Summit 所有,详情见下面的英文版权说明。
The English version of this FAQ list is Copyright 1990-2004 by Steve Summit.
Content from the book 《C Programming FAQs: Frequently Asked Questions》is
made available here by permission of the author and the publisher as a service to
the community. It is intended to complement the use of the published text and is
protected by international copyright laws. The on-line content may be accessed
freely for personal use but may not be republished without permission.
最 新 的 HTML 中 译 版 本 可 以 在 http://c-faq-chn.sourceforge.net/ 取 得 。
另外在同一地址还提供 PDF 版本的下载。在 http://sourceforge.net/projects/
c-faq-chn 可以得到本文的 L
A
T
E
X 源文件。
有关英文原文的问题,请咨询 Steve Summit (scs@eskimo.com )。有关中文译
稿的问题, 请联系孙云 (sunyun.s@gmail.com, 1–12章) 和朱群英 (zhu.qunying@
gmail.com, 13–20章、L
A
T
E
X 文件编辑)。
目录
目录 i
1 声明和初始化 1
1.1 我如何决定使用那种整数类型? . . . . . . . . . . . . . . . . . . . 1
1.2 64 位机上的 64 位类型是什么样的? . . . . . . . . . . . . . . . . 1
1.3 怎样定义和声明全局变量和函数最好? . . . . . . . . . . . . . . . 2
1.4 extern 在函数声明中是什么意思? . . . . . . . . . . . . . . . . . 2
1.5 关键字 auto 到底有什么用途? . . . . . . . . . . . . . . . . . . . 2
1.6 我似乎不能成功定义一个链表。我试过 typedef struct { char
*item; NODEPTR next; } *NODEPTR; 但是编译器报了错误信
息。难道在C语言中一个结构不能包含指向自己的指针吗? . . . . 3
1.7 怎样建立和理解非常复杂的声明?例如定义一个包含 N 个指向返
回指向字符的指针的函数的指针的数组? . . . . . . . . . . . . . . 3
1.8 函数只定义了一次, 调用了一次, 但编译器提示非法重定义了。 . . 4
1.9 main() 的正确定义是什么? void main() 正确吗? . . . . . . . . . 4
1.10 对于没有初始化的变量的初始值可以作怎样的假定?如果一个全
局变量初始值为 “零”, 它可否作为空指针或浮点零? . . . . . . . 4
1.11 代码 int f() { char a[] = "Hello, world!";} 不能编译。 . . . . . . . 5
1.12 这样的初始化有什么问题?char *p = malloc(10); 编译器提示 “非
法初始式” 云云。 . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.13 以下的初始化有什么区别?char a[] = "string literal"; char *p =
"string literal"; 当我向 p[i] 赋值的时候, 我的程序崩溃了。 . . . . 5
1.14 我总算弄清除函数指针的声明方法了, 但怎样才能初始化呢? . . 5
2 结构、联合和枚举 7
2.1 声明 struct x1 { . . . }; 和 typedef struct { . . . } x2; 有什么不同? . 7
2.2 为什么 struct x { . . . }; x thestruct; 不对? . . . . . . . . . . . . . 7
2.3 一个结构可以包含指向自己的指针吗? . . . . . . . . . . . . . . . 7
2.4 在 C 语言中实现抽象数据类型什么方法最好? . . . . . . . . . . . 7
2.5 在 C 中是否有模拟继承等面向对象程序设计特性的好方法? . . . 7
i