目录
static关键字修饰的全局变量 ------> 叫静态全局变量
全局变量
什么是全局变量
- 定义在函数外面 ------> 它是可以被全局访问的
- 内存是在程序开始运行的时候就已经分配好了
- 一旦全局变量分配出来后,内存就一直存在,直到程序退出
- 在代码里面你只要能在编译的时候找到这个全局变量,那么都能使用它
- 如果定义的时候没给定初值,初始值一般默认为0
static关键字修饰的全局变量 ------> 叫静态全局变量
- 静态全局变量,静态全局变量只允许在当前的.c文件里面使用 ------> 不能再其他.c文件里使用
- 不带static的全局变量是有办法能在其他的.c文件里面访问的得到 ------> extern关键字
- 我们每一个.c文件其实可以看作是一个代码模块,如果一个全局变量只在模块内部使用,那么我们一定要把修饰成static, 这样的话,就能够减少维护的成本
static关键字修饰的局部变量
- 它也是个静态全局变量,一开始时候就分配了内存
- 它和定义在外面的静态全局变量的唯一区别是:在函数内部定义的静态全局变量,只能在函数内部使用,其他函数看不到而已
- 函数的调用和返回不会导致这个内存的分配和释放
sizeof运算
-
计算变量所占的内存 ------> sizeof(变量名),结果是字节
-
计算类型所占的内存 ------> sizeof(类型名),结果是字节
一维数组
-
需要批量定义同等类型的变量
-
类型(每个元素的类型都是一样的) 数组名字[批量的个数]
-
内存大小 ------> sizeof(数组名)是数组内存的大小 = sizeof(类型名)*个数
-
数组的初始化
// 读写,访问
// 我们访问的时候会对数组里面的每个元素进行一个编号,编号是从0开始;
// 10个数组的元素: 0 ~9, 6个数组的元素 0 ~5;
// 数组名字[索引的值] // 范围,[0, 数组的个数 - 1];
c[3] = 9;
c[4] = 6;
printf("%d, %d, %d, %d, %d\n", c[0], c[1], c[2], c[3], c[4]);
// 索引我们上面是常数,我们还可以以变量作为索引;
int index = 4;
printf("c[%d] = %d\n", index, c[index]); // ---> 6;
// 从0开始, < 数组大小 [0, 大小-1]
for (int i = 0; i < 5; i++) {
printf("c[%d] = %d\n", i, c[i]);
}
二维数组
// 二维数组:数据类型 数组名称[行][列];
int c_a[3][4]; // 定义了一个 3行4列的二维数组;
int c_b[3][4] = {
// 0 1 2 3
{11, 12, 13, 14}, // 第0行
{21, 22, 23, 24}, // 第1行
{31, 32, 33, 34}, // 第2行
};
// 二维数组也是一段连续的内存;
// 索引从0开始
printf("%d\n", c_b[0][0]);
printf("%d\n", c_b[1][1]);
printf("%d\n", c_b[2][0]);
// end
// 遍历所有的行数:
for (int i = 0; i < 3; i++) {
// 遍历列数
for (int j = 0; j < 4; j++) {
printf("%d ", c_b[i][j]);
}
printf("\n");
}
// end
// 因为内存条是一维,所以二维数组内存上也是1维德,排完一行再排一行
数组的注意
-
数组一旦定义了,大小就再也不能改变了
-
数组一旦定义了,元素的个数就定下来了,那么就只能访问[0,数组大小 - 1]
-
操作时,超出数组的范围,就会越界,程序就会异常