目录1 变量是什么2 单位3 数据类型3.1 内置类型3.2 自定义类型4 变量4.1 局部变量4.2 全局变量4.3 注意点5 sizeof关键字6 操作符6.1 双目/算数操作符6.2 单目操作符6.3 赋值操作符7 printf函数8 scanf函数1 变量是什么在生活中有很多会改变的数值比如身高体重等这些都属于变量而这些变量通常又有很多不同的形式比如3.14属于小数5属于整数因此在C语言中既有变量也有着不同的变量类型。2 单位在说明数据类型之前我们首先需要知道计算机中的数据表示所用的单位。单位如下所示单位转换bit(比特)无Byte(字节)1Byte 8bitKB1KB 1024ByteMB1MB 1024KBGB1GB 1024MB3 数据类型在知道了计算机中表示数据所用的单位后再来看数据类型C语言中的数据类型主要包括内置类型和自定义类型。3.1 内置类型变量名大小_Bool1B(1字节)char1Bshort2Bint4Blong32位机器4B/64位机器8Blong long8Bfloat4Bdouble8B针对于整形家族可分有符号的类型无符号的类型有符号指该类型带有signed关键字可以取负数但是一般不显示signed无符号指该类型带有unsigned关键字不可取负数。在C语言中用户所使用的默认为有符号类型并且signed int intsigned short shortsigned long long signed long long long long。如果用户要使用无符号类型只需要在类型名前加上unsigned即可比如unsigned int就是无符号整形。char类型较为特殊它等价于unsigned char还是signed char取决于编译器而在VS中等价于signed char。3.2 自定义类型主要包括了数组结构体 struct枚举类型 enum联合体 union这些都需要用户自己定义内容所以被称为自定义类型。4 变量在C语言中变量的定义方式如下变量类型 变量名;inta;//示例变量可分为局部变量和全局变量4.1 局部变量局部变量指只在大括号内生效的变量。intmain(){inta0;//这是一个局部变量return0;}4.2 全局变量全局变量指写在大括号的外部整个源文件内都可以随意使用的变量。inta0;//这是一个全局变量intmain(){return0;}4.3 注意点局部变量只在自己所处的大括号内部生效intmain(){//第一个大括号{//第二个大括号inta0;//局部变量}printf(%d,a);//此时不可使用a因为超出a所在大括号的范围}如果全局变量和局部变量名字一样局部变量优先inta0;//全局变量intmain(){inta10;//局部变量printf(%d,a);//此时打印10因为局部变量优先}如果全局变量未初始化默认值是0而如果局部变量为初始化那么就会是随机值inta;//全局变量intmain(){intb;//局部变量printf(%d,a);//结果为0全局默认为0printf(%d,b);//随机值}5 sizeof关键字若想自己查看某个变量或某个类型所占的空间大小就可以使用sizeof关键字。sizeof关键字的用法如下intmain(){inta0;printf(%zd,sizeof(a));//sizeof(变量名)printf(%zd,sizeof(int));//sizoef(类型名)printf(%zd,sizeofa);//sizeof 变量名}需要注意的是使用sizeof计算大小时如果括号内是变量名可以省略括号不写但是如果是类型名一定要写括号。sizeof也具有自己的返回值类型为size_t。本来sizeof所返回的是无负号的整数具体类型取决于操作系统可能是unsigned long或是unsigned int但是这样就不方便程序的移植因此C语言官方设计了size_t的类型来方便使用在VS内用户可以使用%zd或%zu进行打印输出。sizeof在使用时不会去计算括号内的表达式只会根据表达式最终的数据类型得出最终的值。比如intmain(){inta0;shortb0;printf(%d,sizeof(ba2));//a为整形,2为整型,相加后还是整形但是b是short类型因此赋值//会发生截断最终结果为short类型sizeof会计算short类型大小}6 操作符6.1 双目/算数操作符双目操作符指需要两个操作数才能使用的操作符主要有操作符作用进行加法操作-进行减法操作*进行乘法操作\进行除法操作%进行取余操作其中/ 和 % 操作符较为特殊/ 操作符当左右两侧的操作数都是整数时最终的结果也是整数但是左右两边只要有一个小数那么结果就是小数。intmain(){inta5/2;//左右两边都是整数结果是整数2floatb5/2.0;//有一侧为小数结果是小数2.5}% 操作符的两端必须都是整数算出来的是余数针对于负数的取模操作最终结果的正负号取决于第一个操作数的正负号。intmain(){inta5%2;//左右两边必须是整数inta-5%2;//第一个操作数为负数结果是负数}6.2 单目操作符操作符作用前置先1后对变量使用后置先使用后1前置- -先-1后对变量使用后置- -先对变量使用后-1正号的作用-取负数, --较为特殊在这里进行举例intmain(){inta0;intba;//先进行aa1的操作后赋值给bintca;//先进行赋值后进行aa1的操作intd--a;//先进行aa-1的操作后赋值给dintea--;//先赋值给e再执行aa-1的操作}6.3 赋值操作符操作符作用a 2 等价于 a a 2-a - 2 等价于 a a - 2/a / 2 等价于 a a / 2*a * 2 等价于 a a * 2%a % 2 等价于 a a % 2a 2 等价于 a a 2a 2 等价于 a a 2|a | 2 等价于 a a | 2^a ^ 2 等价于 a a ^ 2从右向左进行赋值讲完了变量和操作符如果想要输出变量到屏幕上或者是从键盘输入变量的值要怎么做呢那么就需要printf和scanf函数的支持。7 printf函数printf函数主要是将信息变量输出到屏幕上使用方法如下printf(无占位符的语句);printf(带有占位符的语句变量);在printf中可以通过对占位符作修改来控制输出格式比如占位符作用%5d输出5位整形右对齐不够位用空格进行补齐%-5d输出5位整形左对齐不够位用空格进行补齐%12f输出12位浮点数右对齐不够位用空格进行补齐%.2f输出浮点数并保留两位小数%.5s输出字符串至长度为5的位置8 scanf函数scanf函数主要是等待用户通过键盘输入变量并将变量进行读入scanf的可移植性好但它是不安全的。使用方法如下scanf(带有占位符的语句,变量名)其中是取地址符号可以将变量的地址取出在这里就是告诉了scanf输入的值要放到哪个变量上需要注意的点:scanf不安全的原因scanf在接受输入时并不会关心字符串的长度而一口气将输入的字符串读入因此可能越界访问。scanf在使用%c以外的占位符时会自动过滤掉前方的空格制表符换行等空白字符遇到空格或不符合格式的值时自动读取结束。在使用%c进行读入时不会忽略空白字符因为空白字符也算字符若想忽略可以写scanf( %c,(变量名));在使用%s读入字符串时会自动在末尾加入’\0’scanf会返回读入的值的数量如果读取错误或是遇到文件尾部会返回EOF(就是-1)intretscanf(%d%d,a,b);//如果a,b都读入成功返回2只有一个读入成功返回1