文档介绍:1. 前言
2. 声明和初始化
我如何决定使用那种整数类型?
64 位机上的 64 位类型是什么样的?
怎样定义和声明全局变量和函数最好?
extern 在函数声明中是什么意思?
关键字 auto 到底有什么用途?
我似乎不能成功定义一个链表。我试
过 typedef struct { char *item; NODEPTR next; } *NODEPTR; 但是编译器报了
错误信息。难道在 C 语言中一个结构不能包含指向自己的指针吗?
怎样建立和理解非常复杂的声明?例如定义一个包含 N 个指向返回指向字
符的指针的函数的指针的数组?
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了。
main() 的正确定义是什么? void main() 正确吗?
对于没有初始化的变量的初始值可以作怎样的假定?如果一个全局变量初
始值为``零", 它可否作为空指针或浮点零?
代码 int f() { char a[] = "Hello, world!";} 不能编译。
这样的初始化有什么问题?char *p = malloc(10); 编译器提示``非法初始
式" 云云。
以下的初始化有什么区别?
char a[] = "string literal"; char *p = "string literal"; 当我向 p[i] 赋值的时候, 我的
程序崩溃了。
我总算弄清除函数指针的声明方法了, 但怎样才能初始化呢?
3. 结构、联合和枚举
声明 struct x1 { ...}; 和 typedef struct { ...} x2; 有什么不同?
为什么 struct x { ...}; x thestruct; 不对?
一个结构可以包含指向自己的指针吗?
在 C 语言中实现抽象数据类型什么方法最好?
在 C 中是否有模拟继承等面向对象程序设计特性的好方法?
我遇到这样声明结构的代
码: struct name { int namelen; char namestr[1];}; 然后又使用一些内存分配技巧
使 namestr 数组用起来好像有多个元素。这样合法和可移植吗?
是否有自动比较结构的方法?
如何向接受结构参数的函数传入常数值?
怎样从/向数据文件读/写结构?
我的编译器在结构中留下了空洞, 这导致空间浪费而且无法与外部数据文
件进行"二进制" 读写。能否关掉填充, 或者控制结构域的对齐方式?
为什么 sizeof 返回的值大于结构的期望值, 是不是尾部有填充?
如何确定域在结构中的字节偏移?
怎样在运行时用名字访问结构中的域?
程序运行正确, 但退出时却``core dump''了,怎么回事?
可以初始化一个联合吗?
枚举和一组预处理的#define 有什么不同?
有什么容易的显示枚举值符号的方法?
4. 表达式
为什么这样的代码: a[i] = i++; 不能工作?
使用我的编译器,下面的代码 int i=7; printf("%d\n", i++ * i++); 返回 49?不
管按什么顺序计算, 难道不该打印出 56 吗?
对于代码 int i = 3; i = i++; 不同编译器给出不同的结果, 有的为 3, 有的
为 4, 哪个是正确的?
这是个巧妙的表达式: a ^= b ^= a ^= b 它不需要临时变量就可以交
换 a 和 b 的值。
我可否用括号来强制执行我所需要的计算顺序?
可是&& 和|| 运算符呢? 我看到过类
似 while((c = getchar()) != EOF && c != '\n') 的代码……
我怎样才能理解复杂表达式?``序列点" 是什么?
那么, 对于 a[i] = i++; 我们不知道 a[] 的哪一个分量会被改写,但 i 的确会增
加 1, 对吗?
++i 和 i++ 有什么区别?
如果我不使用表达式的值, 我应该用++i 或 i++ 来自增一个变量吗?
为什么如下的代码 int a = 100, b = 100; long int c = a * b; 不能工作?
我需要根据条件把一个复杂的表达式赋值给两个变量中的一个。可以用下
边这样的代码吗? ((conditio