C 程序员传统上喜欢知道很多(可能比他们需要知道的还要多) 关于机器实现的细节。
空指针在源码和大多数机器实现中都用零来表示的事实导致了很多无根据的猜测。
通常, 你不需要。
当人们随便提到数组指针的时候, 他们通常想的是指向它的第一个元素的指针。
考虑使用指向数组某个元素的指针, 而不是数组的指针。
类型T 的数组蜕变成类型T...
这并非易事。
一种办法是传入指向[0][0] 成员的的指针和两个维数, 然后“手 工” 模拟数组下标。
void f2(int *aryp, int n...
没有完美的方法。
假设有如下声明
int array[NROWS][NCOLUMNS];
int **array1; /* 不齐的*/
int **array2; /* 连...
一般地说, 使用指针的时候, 你必须总是考虑内存分配, 除非明确知道编译器替你做了此事。
如果一个库函数的文档没有明确提到内存分配, 那么通常需要调用者来考虑。Unix 型的手册...
是的。
有些早期的malloc() 文档提到释放的内存中的内容会“保留”,
但这个欠考虑的保证并不普遍而且也不是C 标准要求的。
几乎没有那个程序员会...
我在检查一个字符串是否跟某个值匹配。
为什么这样不行?
char *string;
. . .
if(s...
scanf() 有很多问题&mdASh;&mdASh; 参见问题12.15, 12.16 和12.17。
而且, 它的%s 格式有着和gets() 一样的问题(参见问题12.20...
strncpy() 最初被设计为用来处理一种现在已经废弃的数据结构&mdASh;&mdASh;定长, 不 必’n0’ 结束的“字符串&rdquo...
你可以调用srand() 来初始化模拟随机数发生器的种子, 用的值可以是真正随机数或至少是个变量, 例如当前时间。
这儿有个例子:#include <stdlib.h>...
terminfo, 某些版本的termcap, 以及某些版本的curses 函数库有对这些非ASCII 键的支持。
典型的, 一个特殊键会发送一个多字符序列(通常以...
许多实现高质量IEEE 浮点的系统会提供简洁的工具去处理这些特殊值。
例如, 在<math.h> 以非标准扩展功能, 或可能以<ieee.h>...
浮点数的定义决定它的绝对精确度会随着其代表的值变化, 所以比较两个浮点数的最好方法就要利用一个精确的阈值。
这个阈值和作比较的浮点数值大小有关。
...