谢谢!
指针
--------------------------------------------------------------------------------
5.1 我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么问题? char *p; *p = malloc(10);
5.2 *p++ 自增 p 还是 p 所指向的变量?
5.3 我有一个 char * 型指针正巧指向一些 int 型变量, 我想跳过它们。为什么如下的代码 ((int *)p)++; 不行?
5.4 我有个函数,它应该接受并初始化一个指针 void f(int *ip) { static int dummy = 5; ip = &dummy;} 但是当我如下调用时: int *ip; f(ip); 调用者的指针却没有任何变化。
5.5 我能否用 void** 指针作为参数, 使函数按引用接受一般指针?
5.6 我有一个函数 extern int f(int *); 它接受指向 int 型的指针。我怎样用引用方式传入一个常数?下面这样的调用 f(&5); 似乎不行。
5.7 C 有 ``按引用传递" 吗?
5.8 我看到了用指针调用函数的不同语法形式。到底怎么回事?
5.9 我怎样把一个 int 变量转换为 char * 型?我试了类型转换, 但是不行。
--------------------------------------------------------------------------------
空 (null) 指针
6.1 臭名昭著的空指针到底是什么?
6.2 怎样在程序里获得一个空指针?
6.3 用缩写的指针比较 ``if(p)" 检查空指针是否可靠?如果空指针的内部表达不是 0 会怎么样?
6.4 NULL 是什么, 它是怎么定义的?
6.5 在使用非全零作为空指针内部表达的机器上, NULL 是如何定义的?
6.6 如果 NULL 定义成 #define NULL ((char *)0) 难道不就可以向函数传入不加转换的 NULL 了吗?
6.7 如果 NULL 和 0 作为空指针常数是等价的, 那我到底该用哪一个呢?
6.8 但是如果 NULL 的值改变了, 比如在使用非零内部空指针的机器上, 难道用 NULL (而不是 0) 不是更好吗?
6.9 用预定义宏 #define Nullptr(type) (type *)0 帮助创建正确类型的空指针。
6.10 这有点奇怪。NULL 可以确保是 0, 但空 (null) 指针却不一定?
6.11 为什么有那么多关于空指针的疑惑?为什么这些问题如此经常地出现?
6.12 我很困惑。我就是不能理解这些空指针一类的东西。
6.13 考虑到有关空指针的所有这些困惑, 难道把要求它们内部表达都必须为 0 不是更简单吗?
6.14 说真的, 真有机器用非零空指针吗, 或者不同类型用不同的表达?
6.15 运行时的 ``空指针赋值" 错误是什么意思?
数组和指针
7.1 我在一个源文件中定义了 char a[6], 在另一个中声明了 extern char *a 。为什么不行 ?
7.2 可是我听说 char a[ ] 和 char *a 是一样的。
7.3 那么, 在 C 语言中 ``指针和数组等价" 到底是什么意思 ?
7.4 那么为什么作为函数形参的数组和指针申明可以互换呢 ?
7.5 如果你不能给它赋值, 那么数组如何能成为左值呢 ?
7.6 现实地讲, 数组和指针地区别是什么 ?
7.7 有人跟我讲, 数组不过是常指针。
7.8 我遇到一些 ``搞笑" 的代码, 包含 5["abcdef"] 这样的 ``表达式"。 这为什么是合法的 C 表达式呢 ?
7.9 既然数组引用会蜕化为指针, 如果 arr 是数组, 那么 arr 和 &arr 又有什么区别呢 ?
7.10 我如何声明一个数组指针 ?
7.11 我如何在运行期设定数组的大小 ? 我怎样才能避免固定大小的数组 ?
7.12 我如何声明大小和传入的数组一样的局部数组 ?
7.13 我该如何动态分配多维数组 ?
7.14 有个灵巧的窍门: 如果我这样写 int realarray[10]; int *array = &realarray[-1]; 我就可以把 ``array" 当作下标从 1 开始的数组。
7.15 当我向一个接受指针的指针的函数传入二维数组的时候, 编译器报错了。
7.16 我怎样编写接受编译时宽度未知的二维数组的函数 ?
7.17 我怎样在函数参数传递时混用静态和动态多维数组 ?
7.18 当数组是函数的参数时, 为什么 sizeof 不能正确报告数组的大小 ?
[此贴子已经被作者于2007-4-8 14:15:59编辑过]