C语言中经常会用到getchar和putchar来获取字符和打印字符,大家应该可以熟练地使用他们,but我想剖析一下这两个函数。
以下内容仅依据个人对所学知识的理解。作为编程初学者,对其他基础并不是很了解,如果我的看法有错误的地方,欢迎指正。
目录
我们平时应该是这样使用这两个函数的
char c = 0; c = getchar(); putchar(c);
很好,就是这样使用的。
1.getchar
我们来看看标准库里的getchar
(获取字符从标准输入,注意我们从键盘里输入的abc456是字符!!字符!!!)
此时的你:为什么返回int 类型?
我们来看看对返回值的描述
我们只看第一行:返回字符(提升为整形)???什么意思??
其实,它这里发生了强制类型转换。
我们知道,字符型数据在内存中存的是ASCII码值
它发生de变化是(以字符6举例):
1.from stdin getchar ‘6’(ASCII 码为54)
2.在内存中存的是 0011 0110(char一个字节8bit)
3.返回int, 在内存中变成了 00000000 00000000 00000000 00110110(int 类型 的54)。
接下来验证上述结论。
int c = 0; //既然它返回的是4byte的int 我们就用int来接受
c = getchar(); //输入6,c此时里面存的是4byte的54
printf("%d", c); //我们来打印看看
我们也可以窗口监视
如果以%c形式打印
可以确定此时它的变化是 4byte的int 54 ——> 1byte 的char ‘6’(内存里是54)
所以在我们平时用
char c = getchar();
的时候它已经发生了由int 截断为 char的过程。
2.putchar
奇怪,奇怪,真奇怪,参数是a (int),返回也是a(int),为什么叫putchar输出字符。
是这样的(而我们平时是char c 我猜测是发生(int)c了):