目录
一、数组
1、一维数组
(1)数组的类型
数组算是一种自定义类型,去掉数组名留下的就是数组的类型。
int arr1[10] //arr1 数组的类型是 int[10]
char arr2[5] //arr2 数组的类型是 char[5]
(2)sizeof计算数组元素个数
sizeof 是一个关键字,可以计算类型或者变量大小的,其实也可以计算数组的大小。计算的是数组所占内存空间的总大小,单位是字节。
//VS2022 x64
#include<stdio.h>
int main()
{
int arr[5] = { 1,2,3,4,5 };
printf("%d\n", sizeof(arr[0])); //输出 4 ,因为数组元素是 int类型
printf("%d\n", sizeof(arr)); //输出 20,因为数组里有5个int类型的元素
int sz = sizeof(arr) / sizeof(arr[0]);
printf("%d\n", sz); //输出 5,该数组有5个元素
return 0;
}
2、二维数组
(1)二维数组初始化时能省略行,但不能省略列;
(2)C99中给一个变长数组(variable-length array,简称 VLA)的新特性,允许我们可以使用变量指定数组大小,但在VS2022上不支持变长数组。
3、数组的有趣玩法
多个字符从两端移动,向中间汇聚
#include<stdio.h>
#include<windows.h> //使用Sleep()和system()需要加的头文件
int main()
{
char arr1[] = "hello_world!!!";
char arr2[] = "**************";
int sz = sizeof(arr1) / sizeof(arr1[0]); //计算出的长度是16,
//因为字符串尾部会系统添加一个\0
int right = sz - 1 - 1; //第一个减一是减去字符\0;
//第二个减一是因为数组的下标从0开始
int left = 0;
while(left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
system("cls"); //系统命令,控制台清屏
printf("%s", arr2);
Sleep(1000); //休眠1000ms
left++;
right--;
}
return 0;
}
二、函数
1、库函数
库函数的学习和查看工具很多,比如:
C/C++官方的链接:https://zh.cppreference.com/w/c/header
cplusplus.com:https://legacy.cplusplus.com/reference/clibrary/
2、自定义函数
(1)数组传参的几个重点知识:
- 函数的形式参数要和函数的实参个数匹配
- 函数的实参是数组,形参也是可以写成数组形式的
- 形参如果是一维数组,数组大小可以省略不写
- 形参如果是二维数组,行可以省略,但是列不能省略
- 数组传参,形参是不会创建新的数组的
- 形参操作的数组和实参的数组是同一个数组
(2)嵌套调用 就是函数之间的互相调用。
(3)链式访问 就是将一个函数的返回值作为另外一个函数的参数。
(4)printf 函数返回的是打印在屏幕上的字符的个数。
//VS2022 x64
#include<stdio.h>
int main()
{
printf("%d", printf("%d", printf("%d", 33))); //输出3321
return 0;
}
第三个 printf 打印33,在屏幕上打印2个数字,再返回 2 ;
第二个 printf 打印 2 ,在屏幕上打印1个数字,再放回 1 ;
第一个 printf 打印 1 ,结束。
(5)函数的调用一定要满足,先声明后使用;
- 函数的定义也是一种特殊的声明,所以如果函数定义放在调用之前也是可以的。
(6)在代码量很大的情况下,一般是
- 函数的声明、类型的声明放在头文件(.h)中,
- 函数的实现是放在源文件(.c)文件中。
3、static 和 extern
(1)static 和 extern 都是C语言中的关键字。
(2)extern 是用来声明外部符号的。
如果一个全局的符号在 A文件 中定义的,在 B文件 中就可以使用 extern 进行声明,然后使用。
(5)static 的用处:
- 修饰局部变量,会改变局部变量的生命周期,只有程序结束,变量才销毁,内存才回收。但是作用域不变。
- 修饰全局变量,被 static 修饰,这个全局变量只能在本文件内使用,不能在其他文件内使用。
- 修饰函数,与修饰全局变量一样。
(3)作用域
- 局部变量的作用域是变量所在的局部范围。
- 全局变量的作用域是整个工程(项目)。
(4)生命周期
- 局部变量的生命周期是:进入作用域变量创建,生命周期开始,出作用域生命周期结束。
- 全局变量的生命周期是:整个程序的生命周期。
(6)变量在内存中的存储
完