C 程序员传统上喜欢知道很多(可能比他们需要知道的还要多) 关于机器实现的细节。
空指针在源码和大多数机器实现中都用零来表示的事实导致了很多无根据的猜测。
问题:
考虑到有关空指针的所有这些困惑,
难道把要求它们内部表达都必须为0 不是更简单吗?如果没有其它的原因, 这样做会是没脑筋的。
因为它会不必要地限制某些实现, 阻止它们...
真有机器用非零空指针?或者不同类型用不同的表达?
至少PL/I, Prime 50 系列用段07777, 偏移0 作为空指针。
后来的型号使用段0, 偏移0 作为C 的空指针,...
在C 语言中对数组和指针的困惑多数都来自这句话。
说数组和指针“等价”不表示它们相同, 甚至也不能互换。
它的意思是说数组和指针的算法定义可以用指针方便...
这是一种便利。
由于数组会马上蜕变为指针, 数组事实上从来没有传入过函数。
允许指针参数声明为数组只不过是为让它看起来好像传入了数组, 因为该参数可能在函数内当作数组使用。
...
现象:当我向一个接受指针的指针的函数传入二维数组的时候, 编译器报错了。
数组蜕化为指针的规则(参见问题6.3) 不能递归应用。
数组的数组(即C 语言中的二维数组) 蜕化为数...
这并非易事。
一种办法是传入指向[0][0] 成员的的指针和两个维数, 然后“手 工” 模拟数组下标。
void f2(int *aryp, int n...
问题:为什么这段代码不行?
char *answer;
printf("Type something:\n");
gets(answer);
printf("You typ...
我的strcat() 不行.
我试了char *s1 = "Hello, "; char *s2 ="world!"; char *s3 = strcat(s1, s2);
但...
一般地说, 使用指针的时候, 你必须总是考虑内存分配, 除非明确知道编译器替你做了此事。
如果一个库函数的文档没有明确提到内存分配, 那么通常需要调用者来考虑。Unix 型的手册...
通常的目标是书写一个象包含一个单独的函数调用语句的宏。
这意味着“调用者”需要提供最终的分号, 而宏体则不需要。
因此宏体不能为简单的括弧包围的复合语句...