C数据类型、格式控制符整理
1 | C数据类型: |
数据类型的一些注意点
一个C语言程序,无论其大小如何,都是由函数和变量组成的,函数中包含一些语句,以指定所要执行的计算操作;变量则用于存储计算过程中使用的值。main是一个特殊的函数名,每个程序都从main函数的起点开始执行,每个程序都必须在某个位置包含一个main函数;函数之间进行数据交换的一种方法是调用函数向被调用函数提供一个值(称为参数)列表
变量的命名规则:变量名是由字母和数字组成的序列,但其第一个字符必须为字母,下划线“_”被看作是字母,通常用于命名较长的变量名,以提高其可读性。由于库例程的名字通常以下划线开头,因此变量名不要以下划线开头
变量就是内存中开辟的用来存储数据的那块空间,所以变量是用来存储数据的,我们声明一个变量,如果没有为这个变量赋值,这个变量是有值的,这个值是一个随机数、垃圾值
在同一个大括弧中不允许定义多个变量名相同的变量,不同大括弧可以
自动类型转换:当我们为变量赋值的时候,如果赋值的数据的类型和变量的类型不一致,这时候C系统会将赋值的数据的类型转换为变量的类型再赋值
如果某个算术运算符的所有操作数均为整型,则执行整型运算。但是,如果某个算术运算符有一个浮点型操作数和一个整型操作数,则在开始运算之前整型操作数将会被转换为浮点型
强制类型转换:要把一个量强制转换成另一个类型(通常是较小的类型):(int)10.2
,注意这时候的安全性,小的变量不总能表达大的量:(short)32768
强制类型转换只是从那个变量计算出了一个新的类型的值,它并不改变那个变量,无论是值还是类型都不改变
强制类型转换的优先级高于四则运算:
1 | double a=1.0; |
在printf函数的参数中,只能用\n表示换行符,如果用程序的换行代替\n,C编译器将会产生一条错误信息。printf函数永远不会自动换行,这样我们可以多次调用该函数以分阶段得到一个长的输出行。
printf函数并不是C语言本身的一部分,C语言本身并没有定义输入/输出功能。printf仅仅是标准库函数中一个有用的函数而已,这些标准库函数在C语言程序中通常都可以使用。
printf输出inf表示超过范围的浮点数,printf输出nan表示不存在的浮点数
scanf函数是一个阻塞式的函数,当CPU执行到这个函数的时候,CPU的执行就会暂停,不会继续往下执行了,并等待用户输入数据
scanf函数后面不要加\n
如果没有特殊需要,只使用double,现代CPU能直接对double做硬件运算,性能不会比float差,在64位的机器上,数据存储的速度也不比float慢
#include<stdbool.h>
之后就可以使用bool和true、false了在C语言中如果我们直接写一个小数,那么这个小数的类型是double类型的,如果我们就是希望这个小数是一个float类型的,那么就在这个小数的后面加一个f/F
char类型的变量中只能存储单个字符,并且这单个字符还要用单引号引起来;如果char类型的变量中存储的字符超过一个,那么它只会保存最后一个字符(char变量中可以存储一个空格,无法存储中文,因为在C语言中,一个中文占3个字节)
字符型变量是用来存储字符常量的变量。将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。【‘A’——65、‘a’——97、‘0’——48,为char变量赋值的时候可以直接赋值ASCII码】
所有整型都包括signed(带符号)和unsigned(无符号)两种形式,且可以表示无符号常量与十六进制字符常量;
unsigned类型的数总是正值或0,如果char对象占用8位,那么unsigned char类型变量的取值范围为0~255,而signed char类型变量的取值范围则为-128~127(在采用对二的补码的机器上)
如果一个字面量常数想要表达自己是unsigned,可以在后面加U【255U】,用l或L表示long(long)
unsigned的初衷并非扩展数能表达的范围,而是为了做纯二进制运算,主要是为了移位
17.
无论是float还是double,默认都只显示小数点后6位(不足的用0补齐,多余六位的只保留六位)%.nf
:表示显示小数点后n位%m.nf
:如果变量整体的位数(小数点默认显示n位,无n的默认显示6位,小数点不足6位的在后面补0,大于6位的按6位计算)小于m,不足的地方就会以空格补齐(正数在前面补齐,负数在后面补齐);如果变量整体的位数大于字符宽,那么实际有多少位就显示多少位(%0mf,不足的地方以0补齐)