mirror of
https://github.com/Aexiar/c.git
synced 2024-10-22 14:05:45 +02:00
c
This commit is contained in:
parent
d2ebe102ef
commit
e99a078201
@ -108,9 +108,71 @@ int main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## 1.4 从计算机底层看变量
|
## 1.4 浅谈变量周边概念
|
||||||
|
|
||||||
### 1.4.1 内存条的内部结构
|
### 1.4.1 数据类型
|
||||||
|
|
||||||
|
* 数据是放在内存中的,变量是给这块内存起的名字,有了变量就可以找到并使用这份数据。但是,该如何使用?
|
||||||
|
* 我们知道,对于数字、文字、符号、图形、音频、视频等数据都是以二进制的形式被加载进内存中,进而被计算机中的 CPU 所识别,它们本质上没有任何区别。那么,对于 `00010000` 这个二进制数字,我们是理解为数字 16 ?还是理解为图像中的某个像素的颜色?如果没有特别指明,我们并不清楚。
|
||||||
|
* 换言之,内存中的数据有多种解释方式;那么,我们在存储之前就必须明确指定,如: `int num = 10;` 中的 `int` 就是数据类型,用来限定 `num` (内存中的某个区域)中存储的是整数,而不是图像中某个像素的颜色。
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
>
|
||||||
|
> 总结:
|
||||||
|
>
|
||||||
|
> * ① 数据类型用来说明数据的类型,确定了数据的解释方式,让计算机和程序员不会产生歧义。
|
||||||
|
> * ② C 语言中很多基本的数据类型,如:char、short、int、long 等;如果需要,也可以组成更加复杂的数据类型(后续讲解)。
|
||||||
|
|
||||||
|
### 1.4.2 连续定义多个变量
|
||||||
|
|
||||||
|
* 为了让程序的书写更加简洁,C 语言支持多个变量的连续定义,如下所示:
|
||||||
|
|
||||||
|
```c
|
||||||
|
int a,b,c;
|
||||||
|
```
|
||||||
|
|
||||||
|
```c
|
||||||
|
float m=3.14,n=4.14;
|
||||||
|
```
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
>
|
||||||
|
> * ① 连续定义的多个变量以逗号`,`分隔,并且要拥有相同的数据类型。变量可以初始化,也可以不初始化。
|
||||||
|
> * ② 很多 C 语言程序员喜欢这么写;但是,本人不是很喜欢,因为连续定义可能会导致代码的可读性降低,特别是在声明时变量之间用逗号分隔,容易导致混淆。
|
||||||
|
|
||||||
|
### 1.4.3 数据的长度
|
||||||
|
|
||||||
|
* 所谓数据长度,就是指的是数据占用多少个字节。占用的字节越多,能存储的数据就越多;对于数字而言,值就会越大。反之,能存储的数字就有限。
|
||||||
|
* 多个数据在内存中是连续存储的,彼此之间是没有明显的界限的。如果不指明数据的长度,那么计算机就不知道何时才能存取结束。假设我们保存了一个整数 1000 ,它占用 4 个字节的内存,而读取它的时候却读取了 3 个字节或5 个字节;那么,显示是不正确的。
|
||||||
|
* 所以,在定义变量的时候还要指明数据的长度,而这恰恰是数据类型的另外一个作用,即:`数据类型除了指明数据的解释方式,还指明了数据的长度`。
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
>
|
||||||
|
> 总结:在 C 语言中,每一种数据类型所占用的字节数都是固定的,知道了数据类型,也就知道了数据的长度。
|
||||||
|
|
||||||
|
* 在 32 位环境中,各种数据类型的长度,如下所示:
|
||||||
|
|
||||||
|
| 数据类型 | 长度(字节) |
|
||||||
|
| ----------------- | ------------ |
|
||||||
|
| `char` | 1 |
|
||||||
|
| `short` | 2 |
|
||||||
|
| `int` | 4 |
|
||||||
|
| `long` | 4 |
|
||||||
|
| `long long` | 8 |
|
||||||
|
| `float` | 4 |
|
||||||
|
| `double` | 8 |
|
||||||
|
| `long double` | 8 |
|
||||||
|
| `pointer`(指针) | 4 |
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
>
|
||||||
|
> * ① C 语言有多少种数据类型,每种数据类型长度是多少、该如何使用,这是每一位 C 程序员都必须要掌握的。当然,不必担心,后续还会一一讲解的。
|
||||||
|
>
|
||||||
|
> * ② 需要说明的是:数据类型只在定义变量时指明,而且必须指明;使用变量时无需再指明,因为此时的数据类型已经确定了。
|
||||||
|
|
||||||
|
## 1.5 从计算机底层看变量
|
||||||
|
|
||||||
|
### 1.5.1 内存条的内部结构
|
||||||
|
|
||||||
* 如果只看内存条的外观,无非就是一些集成电路和颗粒而已,如下所示:
|
* 如果只看内存条的外观,无非就是一些集成电路和颗粒而已,如下所示:
|
||||||
|
|
||||||
@ -190,7 +252,7 @@ int main() {
|
|||||||
|
|
||||||
* 综上所示,内存条的分层结构就是 `Channel > DIMM > Rank -> Chip -> Bank -> Row/Column`。
|
* 综上所示,内存条的分层结构就是 `Channel > DIMM > Rank -> Chip -> Bank -> Row/Column`。
|
||||||
|
|
||||||
### 1.4.2 变量的作用
|
### 1.5.2 变量的作用
|
||||||
|
|
||||||
* 如果我们希望计算 10 和 20 的和;那么,在计算机中需要怎么做?
|
* 如果我们希望计算 10 和 20 的和;那么,在计算机中需要怎么做?
|
||||||
|
|
||||||
@ -298,9 +360,9 @@ int num = 10;
|
|||||||
int num = 10;
|
int num = 10;
|
||||||
```
|
```
|
||||||
|
|
||||||
## 1.6 变量的重要操作
|
## 1.7 变量的重要操作
|
||||||
|
|
||||||
### 1.6.1 变量的输出
|
### 1.7.1 变量的输出
|
||||||
|
|
||||||
* 在计算机中,所谓的`输入`和`输出`都是以计算机(CPU 和内存)为主体而言的,即:
|
* 在计算机中,所谓的`输入`和`输出`都是以计算机(CPU 和内存)为主体而言的,即:
|
||||||
|
|
||||||
@ -363,7 +425,7 @@ int main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 1.6.2 计算变量的大小
|
### 1.7.2 计算变量的大小
|
||||||
|
|
||||||
* 我们可以使用 `sizeof`关键字(运算符)来计算变量或类型所占内存空间的大小。
|
* 我们可以使用 `sizeof`关键字(运算符)来计算变量或类型所占内存空间的大小。
|
||||||
|
|
||||||
@ -387,7 +449,7 @@ int main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 1.6.3 获取变量的地址
|
### 1.7.3 获取变量的地址
|
||||||
|
|
||||||
* 在 C 语言中,我们可以使用`取地址运算符 &` 来获取变量的地址。
|
* 在 C 语言中,我们可以使用`取地址运算符 &` 来获取变量的地址。
|
||||||
|
|
||||||
@ -409,7 +471,7 @@ int main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 1.6.4 变量的输入
|
### 1.7.4 变量的输入
|
||||||
|
|
||||||
* 在 C 语言中,提供了 `scanf()` 函数用于从标准输入(通常是键盘)中读取数据并根据变量的地址赋值给变量(变量需要提前声明),其函数声明是:
|
* 在 C 语言中,提供了 `scanf()` 函数用于从标准输入(通常是键盘)中读取数据并根据变量的地址赋值给变量(变量需要提前声明),其函数声明是:
|
||||||
|
|
||||||
@ -509,9 +571,9 @@ int main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## 1.7 标识符
|
## 1.8 标识符
|
||||||
|
|
||||||
### 1.7.1 概述
|
### 1.8.1 概述
|
||||||
|
|
||||||
* 在 C 语言中,变量、函数、数组名、结构体等要素命名的时候使用的字符序列,称为标识符。
|
* 在 C 语言中,变量、函数、数组名、结构体等要素命名的时候使用的字符序列,称为标识符。
|
||||||
|
|
||||||
@ -519,7 +581,7 @@ int main() {
|
|||||||
>
|
>
|
||||||
> 在上世纪 60 - 70 年代的时候,因为国家贫穷,人民生活不富裕等原因,家长虽然会给孩子取名为:`张建国`、`李华强`等;但是,也会取小名为`二狗子`、`狗剩`等,目的是希望孩子能健康成长(养活),像 `张建国`、`李华强`、`二狗子`、`狗剩`都是名字(标识符),伴随人的一生。
|
> 在上世纪 60 - 70 年代的时候,因为国家贫穷,人民生活不富裕等原因,家长虽然会给孩子取名为:`张建国`、`李华强`等;但是,也会取小名为`二狗子`、`狗剩`等,目的是希望孩子能健康成长(养活),像 `张建国`、`李华强`、`二狗子`、`狗剩`都是名字(标识符),伴随人的一生。
|
||||||
|
|
||||||
### 1.7.2 标识符的命名规范
|
### 1.8.2 标识符的命名规范
|
||||||
|
|
||||||
* 强制规范:
|
* 强制规范:
|
||||||
* ① 只能由`小写`或`大写英文字母`,`0-9` 或 `_` 组成。
|
* ① 只能由`小写`或`大写英文字母`,`0-9` 或 `_` 组成。
|
||||||
@ -550,7 +612,7 @@ a、BOOK_sun、MAX_SIZE、Mouse、student23、Football、FOOTBALL、max、_add
|
|||||||
$zj、3sum、ab#cd、23student、Foot-baii、s.com、b&c、j**p、book-1、tax rate、don't
|
$zj、3sum、ab#cd、23student、Foot-baii、s.com、b&c、j**p、book-1、tax rate、don't
|
||||||
```
|
```
|
||||||
|
|
||||||
### 1.7.3 关键字
|
### 1.8.3 关键字
|
||||||
|
|
||||||
* C 语言中的关键字是编译器`预定义`的`保留字`,它们有`特定`的`含义`和`用途`,用于控制程序的结构和执行。
|
* C 语言中的关键字是编译器`预定义`的`保留字`,它们有`特定`的`含义`和`用途`,用于控制程序的结构和执行。
|
||||||
* C80 和 C90 (ANSI C)定义的关键字,如下所示:
|
* C80 和 C90 (ANSI C)定义的关键字,如下所示:
|
||||||
|
Loading…
Reference in New Issue
Block a user