初识C语言3(简单了解)
1、选择语句
- if语句
1、单分支
2、双分支
3、多分支
- switch语句
2、循环语句
C语言中是如何实现循环的呢?
(1)while 语句
(2)for 语句
(3)do…while 语句
3、scanf函数的一些解释
(1)scanf函数返回的是:实际读到的数据的个数
(2)scanf函数读取失败的时候,返回的是EOF
EOF --> end of file 文件结束标志
4、函数
函数的特点就是简化代码,代码复用。
例如:
//写一个两个整型数加法的函数
int Add(int a ,int b) // Add函数有两个参数 a、b
{
return a + b; //return是返回语句
}
int main() //主函数
{
//定义两个变量并初始化
int x = 5;
int y = 1;
//定义一个返回值 ret,接收Add函数的返回值
int ret = Add(x,y);
//输出打印返回值ret
printf("%d\n",ret);
return 0;
}
5、数组
要存储 1~10的数字,怎么存储?
C语言中给出了数组的定义:一组相同类型元素的集合。
(1)数组的定义:
定义一个整型数组,最多放10个元素 ,
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
(2)数组的下标
C语言规定:数组的每个元素都有一个下标,下标是从0开始的。
数组可以通过下标来访问。
6、操作符
C语言提供了非常丰富的操作符,使得C语言使用起来非常地灵活。
先介绍一下占位符
占位符
占位符 | 含义 |
% d | 十进制的整型 |
% c | 字符 |
% s | 字符串 |
% f | 打印 float类型的浮点数 |
% lf | 打印 double类型的浮点数 |
- (1)算术操作符
操作符 | 含义 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
- (2)移位操作符(跟二进制数有关)
操作符 | 含义 |
---|---|
>> | 右移操作符 |
<< | 左移操作符 |
- (3)位操作符(跟二进制数有关,有三个)
操作符 | 含义 |
---|---|
1、& | 按位与 |
2、^ | 按位异或 |
因为编辑器的原因 | 第三个按位或在表格中显示不了 |
3、| (按位或)
- (4)赋值操作符
操作符 | 含义 |
---|---|
= | 等于号 |
1、 a += b | a = a + b |
2、a -= b | a = a - b |
3、a *= b | a = a * b |
4、a /= b | a = a / b |
5、a &= b | a = a & b |
6、a ^= b | a = a ^ b |
7、a >>= b | a = a >> b |
8、a <<= b | a = a << b |
还是按位或操作符在表格显示不了 |
9、a | = b a = a | b
- (5)单目操作符
单目操作符 | 含义 |
---|---|
! | 逻辑取反操作 |
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
~ | 对一个数的二进制按位取反 (二进制的操作符) |
- - | 前置、后置 - - |
++ | 前置、后置 + + |
* | 间接访问操作符(解引用操作符) |
(类型) | 强制类型转换 |
- (6)关系操作符
关系操作符 | 含义 |
---|---|
> | 大于号 |
< | 小于号 |
>= | 用于测试 左边是否大于或者等于右边 |
<= | 用于测试 左边是否小于或者等于右边 |
!= | 用于测试 “ 不相等 ” |
== | 用于测试 " 相等 ",提示 该操作符 == 不能用于判断两个字符串是否相等 |
-
(7)逻辑操作符
1、&& 逻辑与 2、|| 逻辑或 3、! 逻辑非
-
(8)条件操作符(三目操作符)
exp 是表达式exp1 ? exp2 : exp3
-
(9)逗号表达式
exp 是表达式exp1,exp2,exp3, …… expN
-
(10)下标引用、函数调用和结构成员
操作符 | 含义 |
---|---|
[ ] | 下标引用操作符 |
( ) | 函数调用操作符 |
.(小数点) | 指针或者结构体会使用到 |
7、C语言中常见的关键字(32个)
auto break case char const continue default do
double else enum extern float for goto if
int long register return short signed sizeof static
struct switch typedef union unsigned void volatile while
按照对应类别进行分类
数据类型:
auto char const double enum float int long short
signed(有符号的) unsigned(无符号的)
static struct typedef union void
循环语句:
break continue do while for
分支语句:
switch case continue default if else goto
函数: return
声明外部符号: extern
寄存器: register
计算所占内存的大小sizeof
其他volatile
8、在计算机上,数据都可以存储在哪里?
(从上到下,速度是越慢,造价是越低,空间越大)
常见的存储容器 | 存储单位 一般情况 |
---|---|
寄存器 | 字节 (byte) |
高速缓存器 | MB |
内存条 | 8G/16G |
硬盘 | 500G |
网盘 | 2T |
9、内存的分布(简单了解)
(1)栈区:
局部变量、函数参数、临时的变量
特点:
进入作用域创建,出了作用域就释放
(2)堆区:
动态内存分配:malloc、calloc、realloc、free
(3)静态区:
静态变量、全局变量
特点: 放在静态区的数据创建后,直到程序结束才释放
10、局部变量和全局变量(简单了解)
局部变量是无链接属性的,只有全局变量才谈链接属性。
11、头文件(.h)
里面存放的内容
- 类型的定义
- 头文件的包含
- 函数的声明
- ……
12、指针
(1)首先要理解内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中 进行的。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,
每个内存单元的大小是1个字节。
为了能够有效地访问到内存的每个单元,就给内存单元进行了编号,
这些编号被称为该 内存单元的地址,也是即指针。
内存是计算机上的一种存储空间,大小一般是8G/16G
程序运行的时候会载入内存,
程序中如果有 数据需要存储,也会申请内存空间 。
(2)如何有效地使用内存呢?
内存是由一个一个内存单元组成的
并且给每个内存单元编上号 等价于
内存单元的编号地址 等价于指针
一个内存单元的大小是一个字节
(3)如果要访问一个内存单元,那内存单元的地址(指针)如何产生呢?
电脑的地址线有 32、64之分
以32根地址线为例:
32根地址线,地址线如果通上电:
下面是所有的二进制序列的可能(2^32 种可能)
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000001
……
01111111 111111111 1111111 11111111
10000000 00000000 00000000 00000000
……
11111111 111111111 1111111 11111111
-------------------------------------------------------------------------------------------------
就可以作为 2^32 个地址
就可以管理 2^32 个内存单元
也就是 2^32 个字节的内存空间
2^32 byte 换算后 为 4 GB
补充一下存储单位的换算
bit 比特位 byte 字节 1 byte = 8 bit 1 KB = 1024 byte = 2^10 byte 1 MB = 1024 KB = 2^10 KB 1 GB = 1024 MB = 2^10 MB
(4)指针变量的大小
指针变量是用来存放地址的!
地址:
32位机器上,是32个bit位
32位的机器上,指针变量存放的是 32个bit 的地址
32位机器上,指针变量的大小是4个字节
64位机器上,是 64个bit 位
64位的机器上,指针变量存放的是 64个bit 的地址
64位机器上,指针变量的大小是8个字节
13、各种进制的表示和转换
备注:
八进制数要以数字0开头,例如:15的8进制: 017
十六进制数要以0x或者0X开头 ,例如:15的16进制:0xF (里面的0是数字0)
进制 | 表示形式 |
---|---|
二进制 | 0、1 例如:0001 表示十进制数2^0*1 = 1 |
八进制 | 0 ~ 7 例如:0 066 表示十进制数 (8^1)*6+ (8^0)*6=54 |
十进制 | 0 ~ 9 例如:111表示十进制111 |
十六进制 | 0 ~ 9、a ~ e 例如:15的16进制:0xF |
上面的进制,只是数值的不同的表现形式而已
例子:
十进制的 : 11
11的二进制:1011
11的八进制:13
11的十六进制:b
int a = 11; -- 十进制
int a = 0xb; -- 十六机制
int a = 013;(八进制数字是以0开头) -- 八进制
进制的转换计算
二进制 转 十六进制 :
4个二进制位 转成 十六进制
例如:0x 0012 ff40
(0x 代表是这是一个十六进制数、该数有八位数、每一位数都由四个二进制数组成) ( 以32位机器为例 )
内存单元的编号地址 等价于指针
14、结构体
结构体是C语言中特别重要的知识点,
结构体使得C语言有能力描述复杂类型。
比如描述学生,学生包含:名字+年龄+性别+学号 这几项信息。
这里只能使用结构体来描述了。
例如:
struct Stu
{
char name[20]; //名字
int age; //年龄
char sex; //性别
char id[15]; //学号
}; //这里的分号不能忘记哦!
//结构体的初始化:
struct Stu
{
char name[20];
char sex[5];
int age;
}; //这里的分号不能忘记哦!
15、C语言内置类型和自定义类型
内置类型:char short int long long long flaot double
自定义类型:(1)结构体 (2)枚举 (3) 联合体