R&C总结
int a[10][20];
int *b[10];定义仅仅分配了10个指针,并且没有对它们初始化,它们的初始化必须以显示
的方式进行。
静态初始化或通过代码初始化。假定b的每个元素都指向一个具有20个元素的数组,那么编译
就要为它分配200个int类型长度的存储空间以及10个指针的存储空间。指针数组的一个重要
优点在于,数组的每一行长度可以不同。
命令行参数
调用主函数main时,它带有两个参。第一个参数(习惯上称为argc,用于参数计数)的值表示
运行程序时命令行中参数的数目;第二个参数(称为argv,用于参数向量)是一个指向字符串
数组的指针,其中每个字符串对应一个参数。我们通常用多级指针处理这些字符串。
按照C语言的约定,argv[0]的值是启动该程序的程序名,因此argc的值至少为1.如果argc的值
为1,则说明程序名后面没有命令行参数。在上面的例子中,argc的值为3,第一个可选参数为
argv[1],而最后一个可选参数为argv[argc - 1].另外,ANSI标准要求argv[argc]的值必须为
一个空指针
标准库函数strstr(s , t)返回一个指针,该指针指向字符串t在字符串s中第一次出现的位置;
如果字符串t没有在字符串s中出现,函数返回NULL(空指针)。该函数声明在头文件<string.h>中
int *f(); function returning pointer to int
以及
int (*pf)(); pointer to function returning int
char *fgets(char *line , int maxline , FIle *fp)
fgets函数从fp指向的文件中读取下一个输入行(包括换行符),并将它放在字符数组line中,它最多
可读取maxline-1个字符。读取的行将以'\0'结尾保存到数组中。当如果遇到了文件结尾或发生了错误
则返回NULL
int fputs(char *line , FILE *fp)
如果发生错误,该函数将返回EOF,否则返回一个非负值。
strchr(s , c)在s指向的字符串中查找c,若找到则返回第一次出现的位置的指针,否则返回NULL
正确的处理方法是,在释放项目之前先将一切必要的信息保存起来,如下图所示:
for (p = head ; p != NULL ; p = q )
{
q = p->next;
free(p);
}