上一个月,基本在准备期末考试,就没怎么写博客,现在考完了重头,开始我的第一篇c语言博客
部分c语言初学者,比如我,总会有一些奇思妙想(叛逆)(截断):
字符里放‘ab’,会怎样?用%c或%d打印又会怎样,打印结果相同,还是不同?%d打印的数字太大,为什么?数字为什么又是那个数字?%c为什么只打印b?如果是打印‘ab’+‘a’呢?为什么有时用char,有时用int?
现在就让我们来学习一下(学习c语言不久,主要以printf函数的打印结果为依据,如有考虑不周或错误的地方,还望大佬指正):
一、标识符,字符(串),数字的联系与区别
标识符不能以数字开头,不能是关键字,严格区分大小写。
字符简单来说就是你键盘上能敲出的东西。
我们主要以具体的例子来区分:
1. a是什么?没有定义,a就只是未定义标识符,有定义(int a = 0;),a也是作为局部(全局)变量存在,不要一下子想到字符。
2.字符(‘a’)与数字(97)之间的关系并不割裂
至于为什么,我们往下再说
所以同理,\x12,在编译器下,没定义时,是未定义标识符,定义时,是字符变量。’\x12’才表示十六进制的转义字符,且值为18.
二,奇思妙想实质为截断:
1.int a = 97;最基础的,打印结果大家应该都能理解
2.int a = ’97‘;
’97‘为int类型时,7对应的ASCII值为55,9对应的是57,即%d=14647,%c时表达的是字符,一个字符一个字节,取值是256,由于1个字节存储不了那么多信息,计算机只能保留刚读写的7,’7‘对应的ASCII值是55,又对应回来,自然打印的就是字符7了
’97‘对应的值为55+57*256=14647,相当于是256进制的运算,再比如’6f!’的值为33+102*256+54*256*256=3565089,由于一个字节是-128~127,256个数字,故进制为256
3.char a = 97;97为char类型时,数字仍然是97,字符为’a‘,与int一致。但其实又不一样,如当char a = 14674时,表示将’97‘赋值给char a,由上截断,%d=55,%c=7
4.char a = ’97‘,与3.char a = 14674,同理
5与6以及综上所述:int,char与%d,%c,类似,将数字或字符传给他时,int——%d——数字,char——%c——字符,
三、打印中的加减
加减运算中的字符先翻译成数字,再计算’1‘=49,,即49+50+51=150
四、关于内存溢出的问题
直接报错,运行不了
第三个%d打印的是随机值
好了,以上就是我分享的有关c语言学习中可能会遇到的困惑,希望能够帮助到大家。谢谢