一、C语言常见概念
1、语句
(1)C语言代码是由语句构成的
- 空语句
一个分号就是一个语句,空语句。(需要一条语句,但是这个语句不需要做任何事)
- 表达式语句
在表达式的后面加上分号,就是表达式语句。
- 函数调用语句
函数调用的时候也会加上分号。
- 复合语句
成对括号中的代码就构成一个代码块,也称为复合语句。
- 控制语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式(顺序结构、选择结构、循环结构),C语言有九种控制语句。
- 条件判断语句也叫分支语句:if语句、switch语句。
- 循环执行语句:do…while、while、for。
- 转向语句:break、goto、continue、return。
2、注释
(1)标题注释是对代码的说明,编译器会忽略注释。好的注释可以帮助我们更好的理解代码,但不要写不必要的注释。
- /**/形式
不支持嵌套使用,/开始注释后,遇到第一个/就认为注释结束了。 - //形式
从//到行尾都是注释,这种是单行注释
不管哪一种注释,都不能放在双引号里面。双引号里面的注释符会成为字符串的一部分,失去注释作用。
3、注释会被替换
编译时,注释会被替换成一个空格,所以max/…/value会变成max value。
二、C语言数据类型和变量
1、数据类型介绍
(1)C语言提供了丰富的数据类型来描述各种数据。使用整型类型来描述整数,使用字符类型来描述字符,使用浮点数来描述小数。
- 内置类型
字符型
整型
//短整型
short [int] //**int 可省略**
[signed] int
unsigned short [int]
//整型
int
[signed] int
unsigned int
//长整型
long [int]
[signed] long [int]
unsigned long [int]
//更长的整型
long long [int]
[signed] long long [int]
unsigned long long [int]
浮点型
float
double
long double
布尔类型
C语言中原来并没有为布尔值单独设置一个类型,而是使用0表示假,非零值表示真。
在C99中引入了布尔类型,专门表示真假。
_Bool
布尔类型的使用要包含头文件<stdio.h>,变量取值是true或者false。
#define bool _Bool
- 自定义类型
数组、结构体 struct、枚举 enum、联合体 union
- 各种数据类型的长度
每一种数据类型都有自己的长度,不同的数据类型,有长度不同的变量,变量长度不同,存储的数据范围就有所差异。
(1)sizeof操作符
sizeof是一个关键字,也是操作符,专门用来计算sizeof的操作
符数的类型长度的,单位是字节。
sizeof操作符的操作数可以是类型,也可以是变量或者表达式
sizeof(类型)
sizeof 表达式
sizeof的操作数如果不是类型,是表达式,可以省略后边的括号;后边的表达式是不真实参与运算的,根据表达式的类型来得大小;sizeof的计算结果是size_t类型。
sizeof运算符的返回值,C语言只规定是无符号整数,具体返回什么类型,不同的系统,返回的类型不同。C语言创建了一个类型别名size_t来解决,来统一表示sizeof返回值的类型。
#include <stdio.h>
int main()
{
printf("%zd\n",sizeof(char));
printf("%zd\n",sizeof(short));
printf("%zd\n",sizeof(int));
printf("%zd\n",sizeof(long));
printf("%zd\n",sizeof(long long));
printf("%zd\n",sizeof(float));
printf("%zd\n",sizeof(double));
printf("%zd\n",sizeof(long double));
return 0;
}
C语言标准规定:sizeof(long)>=sizeof(int)
字节:是计算中的单位。
一个二进制位的存储需要一个bit位的空间。(2的10次方=1024).
bit | |
---|---|
byte | 8 bit |
KB | 1024 byte |
MB | 1024 KB |
GB | 1024 MB |
TB | 1024 GB |
PB | 1024 TB |
siezof中表达式不计算,在编译过程中表达式的类型就确定了,而表达式的执行,却要在程序运行期间才能执行。 |
2、signed和unsigned
(1)C语言使用signed和unsigned关键字修饰字符型和整型。signed关键字,表示一个类型带有正负号,包含负值。unsigned关键字,表示该类型不带有正负号,只能表示零和正整数。对于int类型,默认是带有正负号的(int相当于signed int).(有符号的整数打印应使用%d,无符号的整数打印应使用%u)。
整数变量声明为unsigned的好处是,同样长度的内存能够表示的最大整数值,增大了一倍。(16位的signed short int的取值范围是:-32768~32767,而unsigned short int的取值范围是:0~65535).
char是否有符号取决于编译的实现,大部分的编译器上char == signed char.
3、数据类型的取值范围
(1)每一种数据类型有自己的取值范围,也就是存储数值的最大值和最小值的区间。(limits.h文件中说明了整型类型的取值范围,float.h这个头文件中说明浮点型类型的取值范围)。
4、变量
(1)变量的创建
经常变化的值称为变量,不变的值称为常量。
int age;
| |
| |
| 变量名
数据类型
变量在创建的时候就给一个初始值,就叫初始化。
int age=10;
char ch='q';
(2)变量的分类
- 全局变量:在大括号外部定义的变量就是全局变量(全局变量的使用范围广,整个工程中想使用,都有办法使用)
- 局部变量:在大括号内部定义的变量就是局部变量(局部变量的范围比较局限,只能在自己所在的局部范围内使用的)
全局变量和局部变量名字相同时,局部优先。
内存由三部分栈区(局部变量、函数参数)、堆区(动态内存管理)、静态区(全局变量、静态变量)。
5、算数操作符:+、-、*、/、%
这些操作符都是双目操作符。
#include <stdio.h>
int main()
{
int a=10;
int b=20;
//加法
printf("%d\n",a+b);
//减法
printf("%d\n",a-b);
//乘法
printf("%d\n",a*b);
//除法
printf("%d\n",a/b);//除号两端如果是整数,执行的是整数除法,结果也是整数
//如果希望得到浮点数的结果,两个运算数必须至少有一个浮点数。
printf("%f\n",10/4.0);
//取余运算,返回两个整数相除的余值,这个运算符只能用于整数,不能用于浮点数。
printf("%d\n",10%4);
//负数求模的规则,结果的正负由第一个运算数的正负号决定。
printf("%d\n",-11%5);
printf("%d\n",11%-5);
return 0;
}
6、赋值操作符:=和复合赋值
在变量创建的时候给一个初始值叫初始化,在变量创建好后,再给一个值,叫赋值。
int a=100;//初始化
a=200;//赋值
=是一个随时可以给变量赋值的操作符。
(1)连续赋值
int a=3;
int b=5;
int c=0;
c=b=a+3;
但是不太容易观察,可读性低。
(2)复合赋值符
a = a + 10;
a += 10;//复合赋值
a = a - 3;
a -= 3;
单目操作符:++、–、+、-
(1)++和–
int a = 10;
int b = ++a;//前置加加,先加一,后使用。a先加1,变成11,在赋值给b
//所以b=11
printf("a=%d\n",a);
printf("b=%d\n",b);
int a = 10;
int b = a++;//后置加加,先使用,后++。a先赋值给b,然后加加。
printf("a=%d\n",a);
printf("b=%d\n",b);
int a = 10;
int b = ++a;//前置减减,先减一,后使用。a先减1,变成9,在赋值给b
printf("a=%d\n",a);
printf("b=%d\n",b);
int a = 10;
int b = a--;//后置减减,先使用,后--。a先赋值给b,然后减减。
printf("a=%d\n",a);
printf("b=%d\n",b);
int a = 10;
printf("%d\n",a--);
printf("%d\n",a);
7、强制类型转换
形式:(类型)
int a = (int)3.14;
printf("%d\n",a);