最近发现写了一段时间的C之后,还是有一些点并没有很好的get,我就想总结出来,写个系列博客,自己也好好的整理一下思路。这个系列主要出自三本书:《C专家编程》,《C陷阱和缺陷》,《C和指针》。有兴趣的同学可以好好看一下这几本书,对于打好C语言的基础是个非常不错的几本书。
2 getchar()函数的使用;
getchar()函数从标准输入读取一个字符并返回它的值。如果输入中不再存在任何字符,函数就会返回常量EOF(在stdio.h中定义),用于提示文件的结尾。
getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了,第一次getchar()时,确实需要人工的输入,但是如果你输了多个字符,以后的getchar()再执行时就会直接从缓冲区中读取了。
实际上是 输入设备->内存缓冲区->程序getchar 。
你按的键是放进缓冲区了,然后供程序getchar 你有没有试过按住很多键然后等一会儿会滴滴滴滴响,就是缓冲区满了,你后头按的键没有存进缓冲区. 键盘输入的字符都存到缓冲区内,一旦键入回车,getchar就进入缓冲区读取字符,一次只返回第一个字符作为getchar函数的值,如果有循环或足够多的getchar语句,就会依次读出缓冲区内的所有字符直到‘\n‘.要理解这一点,之所以你输入的一系列字符被依次读出来,是因为循环的作用使得反复利用getchar在缓冲区里读取字符,而不是getchar可以读取多个字符,事实上getchar每次只能读取一个字符.如果需要取消‘\n‘的影响,可以用getchar();来清除,这里getchar();只是取得了‘\n‘但是并没有赋给任何字符变量,所以不会有影响,相当于清除了这个字符.还要注意的是这里你在键盘上输入ssss看到的回显正是来自于getchar的作用,如果用getch就看不到你输入了什么.
1 #include <stdio.h>
2
3 int main()
4 {
5 int test;
6 while((test=getchar())!=EOF &&test!=‘\n‘)
7 {
8 printf("%d\n", test);
9 }
10 return 0;
11 }
3 一些指针的声明
我之前一直好奇
int *a 和 int* a到底是怎么回事?
其实这两个声明具有一样的意思,都是声明一个指向整型的指针变量a。但是后者并不是一个好的方法,因为在声明几个变量的时候容易出错。比如 int* a,b,c;实际上你只是想把a声明为指针变量。
4 链接属性
在变量的作用域中,我们要注意范围,而链接属性遇着息息相关。
5 2维数组作为参数的问题
2维数组作为参数在很多地方都会用到,但是这个问题非常容易出错。
注意作为参数的时候必须要指定第二个维度的大小。例如a[][10]这样可以作为参数;
但是如果是这样的:a[][].就不能作为形参。
6 字符串长度
在库函数中有一个strlen函数用来得到字符串的长度,但是在使用的时候要注意,否则很容易出错;下面举例来说明:
7 字符分类
就是库函数中包括一些字符的函数,可以很方便的对字符进行一些基本的操作。
相关联的是一些内存操作,功能类似,但是更加强大。
8 &和&&,|和||的区别
&是按位运算符;都是与运算。
&&是逻辑运算符;
|是按位运算符;都是或运算。
||是逻辑或算符;
9 符号的细节。
在使用多字符符号的时候,注意空格的存在,不能再多字符符号中乱留空格,会造成意思完全改变