#include <stdio.h> //头文件,为了调用他人的函数
int main(void) //main函数,C程序执行入口,()内为返回值,int为返回值类型
{
int a, b; //变量声明,a和b为变量名字
scanf("%d %d", &a, &b); //C语言标准函数scanf
printf("max = %d\n", a > b ? a : b); //C语言标准函数printf,“\n”转义字符表示无法键入的字符(“\t”制表符,“\b”退格键)
return 0; //保持逻辑连贯性的需要,正常结束main函数返回整形 0
}
一、变量
变量相当于容器,只有调用的时候才使用内存空间,否则不占用
(一)变量种类
1、局部变量 / 临时变量
特点:
定义在函数内的变量
只能在函数内使用
函数一旦结束,变量也会对应被销毁,释放内存空间
若没有赋予初值,数值会是乱码
2、全局变量
特点:
定义在函数外的变量
能在整个程序中使用(即所有函数都可使用)
一旦声明,在整个程序 运行过程中都存在,不会被销毁
若没有赋予初值,数值会是 0
3、局部变量与全局变量相结合
若在函数外定义了一个全局变量,刚好在函数内定义了一个跟全局变量名字相同的局部变量,会优先使用局部变量(就近原则)
ps.同一变量只要不在同一层次就可以
4、变量的命名
严格区分大小写(在Linux中变量命名,一般采用“小写”+“下换线”)
不能以数字开头,不能出现除“_”外的特殊字符号
同一层次不允许变量重名
5、变量的声明
int i;
申请一块内存,用 i 命名这块内存
这块内存是 int 类型的的内存(决定了两件事):
决定了申请的内存大小(不同类型的变量其内存大小都不同)
决定了之后用什么方式来分析这一块内存
i = 10;
通过 i 这个别名访问到其内存,往其内赋值为10
(二)数据类型
1、常量类型
(1)整型常量
23:十进制整型常量,引用于计算类场景
023:八进制整形常量,引用于权限类场景,一位代表3位二进制
0x23/0X23:十六进制整型常量,引用于底层场景,一位代表4位二进制
23U:常用声明类型方式,默认的23是整形,但23U就变成无符号整形(unsigned int)
(2)浮点型常量
3.14:浮点数
3.14e2/3.14E-2:科学计数法浮点数
(3)字符型常量
ASCII码来存放一个字符,每个字符有其对应的一个数字,例如:‘A’为字符型常量,其对应的数字为65,‘a’为字符型常量,其对应的数字为97,ASCII码中最大的英文字符最大值为177
'\n':转义序列,代表换行动作
'\23':转义字符,默认将后面的数值以八进制的方式找到对应的ASCII码
'\x23':转义字符,默认将后面的数值以十六进制的方式找到对应的ASCII码
'\\':转义字符“\”
ps.字符型常量一般除了转义序列和转义字符外,一般不允许有多个字符在里面
(4)字符串型常量
"ymy" =>双引号里面随便放
特点:
字符串其实是个字符的地址
字符串默认在其技术位置自动补一'\0'字符(所以"ymy"看起来只有3个字符,但其实大小为4个字符)
类型char*:字符地址,返回的是字符串中首元素的地址
(5)布尔型常量
头文件:
#include <stdbool.h>
逻辑真:ture 逻辑假:false
一般C语言中零为假,非零为真
2、变量类型
(1)int 整形变量
大小:一般32位
分析方式:
最高位为符号位,剩下的31位为数据位
正数:符号位为0,剩下的31位按照原码的方式分析:
负数:符号位为1,剩下的31位按照原码的补码方式来进行分析;
原码:原本的数据解释出来是怎么样子的就是哪个样子
反码:原码按位取反
补码:反码+1
(2)short 短整型变量
大小:一般16位
分析方式:
最高位为符号位,剩下的15位为数据位
正数:符号位为0,剩下的15位按照原码的方式分析:
负数:符号位为1,剩下的15位按照原码的补码方式来进行分析;
原码:原本的数据解释出来是怎么样子的就是哪个样子
反码:原码按位取反
补码:反码+1
ps.一般来说,编译器决定位数大小。
(3)long 长整型变量
大小(long):一般64位
在32位系统中是32位
大小(long long):64位
分析方式:
最高位为符号位,剩下的63位为数据位
正数:符号位为0,剩下的63位按照原码的方式分析:
负数:符号位为1,剩下的63位按照原码的补码方式来进行分析;
原码:原本的数据解释出来是怎么样子的就是哪个样子
反码:原码按位取反
补码:反码+1
(4)char 超级小整型(8位单片机里面使用)
大小:8位数据
ps.无符号也是1bit
ascii最大值是127(用到7位数据)
3、字符与字符串的存放方式
(1)存放字符
char:用来存放字符类型
大小:8位
分析方式:按照ASCII的方式去分析内存
赋值方式:
char ch='a';
char ch = 97;
char ch = '\132';
(2)存放字符串
1)char *string = "hello"
将"hello"字符串赋值给string这个指针变量,其中,首元素h的地址给了string指针变量
2)char string[100] = "hello"
将"hello"字符串的内容复制到数组string中
4、各数据类型字32/64位系统字节数
数据类型(中) | 数据类型(英) | 32位 | 64位 | 取值范围 |
---|---|---|---|---|
布尔型 | bool | 1 | 1 | ture or false |
字符型 | char | 1 | 1 | -128~127 |
无符号字符型 | unsigned char | 1 | 1 | 0~255 |
短整型 | short | 2 | 2 | -32768~32767 |
无符号短整型 | unsigned short | 2 | 2 | 0~65535 |
整形 | int | 4 | 4 | -2147483648~2147483647 |
无符号整形 | unsigned int | 4 | 4 | 0~4294967295 |
长整型 | long | 4 | 8 | \ |
无符号长整型 | unsigned long | 4 | 8 | \ |
长整型 | long long | 8 | 8 | -2^64~2^64-1 |
单精度浮点型 | float | 4 | 4 | 范围-2^128~2^128 精度为6~7位有效数字 |
双精度浮点型 | double | 8 | 8 | 范围-2^1024~2^1024 精度为15~16位 |
扩展精度浮点型 | long double | 8 | 8 | 范围-2^1024~2^1024 精度为15~16位 |
地址 | * | 4 | 8 | \ |