Aftet Reading My Thinking Abotu C Programming FAQs 495
1.typedef 与 #define 有什么区别?
最好使用typedef 因为它可以正确处理指针类型,当然#define也有#ifdef的优点,同时typedef也有遵守作用域规则的特点(即可在函数或块内声明)。
2.typedef 声明一个结构指向自己的指针
typedef struct node{
char *item;
struct node *next;
}NODEPER;
3.关于命名空间的管理(即函数命名)
综合规则和头文件里的“未来使用”的考虑
不要使用任何以下划线开始的名称
4.*p++
由于自增运算++,--操作符优先级比前缀一元操作符优先级要高,因此*p++与*(p++)等价。他自增p并返回p自增前所指向的值。
5.指针与数组等价
一旦提到这个数组,数组就退化成指针了。所以当作为函数形参时数组和指针的声明可以互换,这是一种方便的做法,实际上数组由于马上退化为指针,他从来就没有被传入到函数,函数接收到的是指针。
指针可以模拟数组,指针算术与数组下标运算等价,他俩并不完全一样。
6.布尔表达式
C里面没有正式的布尔类型,它将0解释为False,任何非零值解释为真,而在逻辑表达式中常常返回1为真。(例如while(1)为常用死循环)
7.c=getchar()!=EOF
EOF在头文件stdio.h中定义为-1,但这并不是指你要得输入-1才会结束。因为当你输入-1时是两个字符,而getchar一次只读一个字符。
8.在使用scanf和getchar或是gets时出现问题
这实际上就是输入缓冲区的问题,由于scanf对换行符的特殊处理,要么就完全使用scanf,要么就干脆不用它。
9.scanf、gets有很多问题,如何代替?
可以先用fgets来读出整行,再用scanf或其他办法来解释。
10.在C语言中获得当前时间?
头文件time.h下,使用time、ctime、localtime等函数均可。ctime转换time_t为可打印的字符串。
time_t now;
time(&now);
printf("It's %s",ctime(&now));