第一次

《C和指针》
第一章

void rearrange(char *output,char conse *input,int n_columns,int const columns[]);
第2个和第4个参数被声明为const,这表示函数将不会修改函数调用者所传递的这两个参数。

gets函数从标准输入读取一行文本并把它存储于作为参数传递给他的数组中。一行输入由一串字符组成,以一个换行符结尾。gets函数丢弃换行符,并在该行的末尾存储一个NUL字节(①)(一个NUL字节是指字节模式全为0的字节,类似‘\0’这样的字符常量)。然后gets函数返回一个非NULL值,表示该行已被成功读取当gets函数被调用但事实上不存在输入行时,它就返回NULL值,表示它到达了输入的末尾(文件尾)
字符串就是一串以NUL字节结尾的字符。NUL是作为字符串终止符,它本身并不被看作是字符串的一部分
①NUL是ASCII字符集中‘\0’字符的名字,它的字节模式为全0。NULL指一个其值为0的指针。它们都是整型值,其值也相同,所以它们可以互换使用。然而,你还是应该使用适当的常量,因为它能告诉阅读程序的人不仅使用0这个值,而且告诉他使用这个值的目的
②符号NULL在头文件stdio.h中定义。另一方面,并不存在预定义的符号NUL,所以如果你想使用它而不是字符常量‘\0’,你必须自行定义。

scanf函数的返回值是函数成功转换并存储于参数中的值的个数

对于这个函数(scanf),你必须小心在意,理由有二,首先,由于scanf函数的实现原理,所有标量参数的前面必须加上一个“&”符号。数组参数前面不需要加上“&”符号。但是,数组参数中如果出现了下标引用,也就是说实际参数是数组的某个特定元素,那么它的前面也必须加上“&”符号

使用所有格式码(除了%c之外)时,输入值之前的空白(空格、制表符、换行符等)会被跳过,值后面的空白表示该值的结束。

%g 打印一个浮点值

while((ch=getchar())!=EOF&&ch!=’\n’)
当scanf函数对输入值进行转换时,它只读取需要读取的字符。这样,该输入行包含了最后一个值的剩余部分仍会留在那里,等待着被读取。它可能只包含作为终止符的换行符,也可能包含其他字符。不论如何,while循环将读取并丢弃这些剩余的字符,防止它们被解释为第1行数据。
getchar函数从标准输入读取一个字符并返回它的值。如果输入中不再存在任何字符,函数就会返回常量EOF(在stdio.h中定义),用于提示文件的结尾。

为什么ch被声明为整型,而我们事实上需要它来读取字符?答案是EOF是一个整数型,它的位数比字符型更多,把ch声明为整型可以防止从输入读取的字符意外地被解释为EOF。但同时,这也意味着接收字符的ch必须足够大,足以容纳EOF,这就是ch使用整型值的原因。

空语句
语法要求这个地方出现一条语句但又无需执行任何任务的时候。这个分号独占一行,这是为了防止读者错误地以为接下来的语句也是循环体的一部分。

在#include文件中放置函数原型。

在使用下标前先检查它们的值

在while或if表达式中蕴含赋值操作。

如何编写一个空循环体

始终进行检查,确保数组不越界

你可能感兴趣的:(c语言,指针,c和指针)