一、数据类型
C语言的基本类型包括:整型、浮点型和字符型
整型包括:short、unsigned short、int、unsigned int、long、unsigned long、bool
浮点型包括:float、unsigned float、double、unsigned double
字符型包括:char、unsigned char
各种类型所占字节数,标准有规定了这些类型的最小取值范围,但是具体字节数是由编译器来决定。
C99标准规定:int表示的范围不能小于short表示的范围;long表示的范围不能小于int表示的范围;
一般情况下:
16位平台
char 1个字节8位
short 2个字节16位
int 2个字节16位
long 4个字节32位
指针 2个字节
32位平台
char 1个字节8位
short 2个字节16位
int 4个字节32位
long 4个字节
long long 8个字节
指针 4个字节
64位平台
char 1个字节
short 2个字节
int 4个字节
long 8个字节(区别)
long long 8个字节
指针 8个字节(区别)
64位系统,指针位数指的是CPU 里面的通用寄存器的数据宽度为64位,也就是说一个地址占二进制位数是64,即为8字节。32位系统,同理,一个地址占32位二进制空间,位4位。
C语言中的常量:
1、整型常量:3种表示方法,十进制整数;八进制整数,0开头;十六进制整数,0x开头。
2、实型常量:2种表示方法,十进制小数表示;指数形式,科学计数法。
3、字符常量:2中表示方法,用单引号括起来,只能有一个字符;;\开头的转义字符。
4、字符串常量:用双引号括起来
5、地址常量:数组名
容易混淆的逻辑运算符和位运算符:
逻辑运算: || && !
位运算:| & ^ 关于异或:两个值相同为0,不同位1
常用的优先级:
前自增操作符的优先级大于赋值运算符,赋值运算符的优先级大于后自增操作符。
++ -- 优先级与* 相同,结合性是由右到左
*p++ 先将p取值,将结果赋给表达式,再把指针自增1
*(p++) 同上
(*p)++ 先将p取值,将结果赋给表达式,然后把值自增1
*++p 指针p先自增1,然后取值
++*p 先取值,然后将值自增
++*p++ = ++(*(p++))
int main()
{
char buf[]="asdfgh";
char* p1 = &buf[3];
char* p2 = &buf[3];
printf("*--p1 = %c\n", *--p1);
printf("*(p2--) = %c\n", *(p2--));
return 0;
}
输出结果:
*--p1 = d
*(p2--) = f
左值和右值:左值可以出现在赋值语句的左边或右边,而右值只能出现在右边。