支持的类型

char 1个字节short 2个字节int 4个字节float 4字节double 8个字节long windows 4字节,linux 32位 4字节, 64位 8字节
siezof运算符
计算的是在内存中的大小
sizeof是单目运算符,用来计算操作数在内存中占据的字节数,其操作数既可以是括在圆括号中的类型标识符,其返回值是size_t类型,即无符号整数
sizeof(short); //返回2
sizeof(long); //返回4
sizeof(int); //不确定,取决于不同的操作系统
返回的是占用空间大小是为这个变量开辟的大小,而不只是他用到的空间
要注意数组名和指针变量的区别。通常情况下,我们总觉得数组名和指针变量差不多,但是在用sizeof的时候差别很大,对数组名用sizeof返回的是整个数组的大小,而对指针变量进行操作的时候返回的则是指针变量本身所占得空间,在32位机的条件下一般都是4。而且当数组名作为函数参数时,在函数内部,形参也就是个指针,所以不再返回数组的大小
变量
在程序运行过程中,其值可以改变
变量在使用前必须先定义,定义变量前必须有相应的数据类型
声明和定义区别
声明变量不需要建立存储空间
extern int a;
定义变量还需建立存储空间
//extern关键字只做声明,不能做任何定义
//声明一个变量a,a在这里没有建立存储空间
extern int a;
a = 10; // err, 没有空间不可以赋值
int b = 10; //定义一个变量b, b的类型为int, b赋值为10
getchar();
return 0;
从广义的角度来讲声明中包含着定义,即定义是声明的一个特例,所以并非所
有的声明都是定义:
- int b它既是声明,同时又是定义
- 对于extern b来讲它只是声明不是定义
一般的情况下,把建立存储空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”。
浮点型变量
浮点型分为单精度型(float)和双精度型(double)两种
- float型数据占用4个字节(32bits)存储单元,提供的有效数字是6~7位
- double型数据占用8个字节(64bits)存储单元,提供的有效数字是15~16位
数值类型
singned是有符号数
short是短整型,一般是int一半大小,在32位的windows下是2个字节
Long是长整型,在windows是4个字节,在32位linux是4字节,在64位linux下是8字节
Long long是长长整形,longlong在32位系统和64位系统下都是8个字节
unsigned int, unsigned short, unsigned long,
在c语言中表达一个整数的常量,如果什么标识都不加,那么默认类型是singed intunsigned int b=100u; long long e =100ll; unsigned long f =100ul;整数的溢出
当超过一个整型能够存放最大的范围时,整数会溢出,溢出有符号位溢出和最高位溢出的区别,符号位溢出会导致正负数发生变化,最高位溢出导致最高位丢失char类型
‘’引起来的就是char的常量
‘a’就是char类型的常量
“a”就是一个字符串类型的常量
char在内存中占用了一个字节,c语言中没有byte类型的数据,但可以用char来代替
unsigned char a;//定义了一个无符号的byte类型
char能有多大?-128到127之间, unsigned char范围是0到255之间类型限定
register
把变量放在寄存器里面会提高效率
register是建议指令不是命令型指令,如果cpu有空闲寄存器就生效,如果没有就无效register int b=0; //这个变量在寄存器里面,不在内存里面
volatile
代表定义一个变量,这个变量值可能在cpu指令外被改变
volatile int a; //定义一个volatile类型的int变量
通过volatile定义的变量,编译器不会去优化这个变量相关的代码
字符串
字符串是内存中一段连续的char空间,以^\0^结尾
‘a’在内存中是一个字符a
“a”在内存中是2个字符,第一个是’a’,第二个是’\0’
“helloworld”在内存中是 ‘h’ ‘e’ … ‘d’ ‘\0’
scanf函数与getchar函数
getchar是从标准输入设备中读取一个char
char a=getchar(); //从标准输入设备中读取一个char,赋值给a,是acsii码值
scanf通过%d转义的方式可以得到用户通过标准输入设备输入的整数
scanf("%d",&a); //这里一定要写取地址操作符

