0x01 数组

数组和数组元素:
C语言的数组是一种用于存储 相同类型数据 的数据结构.
被存储的数据叫数组元素,通过数组下标进行访问这些数组元素
一个数组被定义后,可以有多个数组元素
数组也分一维数组和多维数组

数组下标:
数组下标用于表示数组元素在数组中的位置
下标从0开始计算,到数组元素个数减一为止,超过数组下标范围的访问叫越界访问
C语言不会检查下标的范围,当越界访问,结果不可预知,可能指向其它变量或导致段错误
数组的操作就是对于下标的控制
数组定义:
        int arr[10];
其中,arr表示数组,arr[index]代表数组元素,index就是数组的下标.

数组的定义和初始化:
定义语法:
        元素数据类型 数组变量名[元素的个数] = {值}
其中,元素的个数也叫数组长度,= 值可以忽略不写
比如:
        int arr[5];
        int arr[5] = {1,2,3,4,5}
一维数组的初始化
动态:数组初始化使用循环对元素赋值的方式完成
静态:用大括号括起来的常量列表
如果给定了初始化式,可以省略数组长度

1
2
3
4
5
6
7
8
9
10
11
12
//使用for循环给数组arr赋值并打印
#include "stdio.h"
int main(){
int arr[10]={0};
int i=0;
for(i=0;i<10;i++){
arr[i] = i;
printf("%d ",arr[i]);
}
}

result:0 1 2 3 4 5 6 7 8 9

数组和sizeof():

1
2
3
4
5
6
//计算数组的存储区大小
sizeof(数组名);

//计算数组的长度
sizeof(数组名)/数据类型;
sizeof(数组名)/sizeof(数组名[0]);

可变长数组:
一般来说,数组的长度都应该有个常数,但在C99规范中允许使用长度可变的数组
可变数组的长度是在运行期间确定的,Demo:

1
2
3
int n;
scanf("%d",&n);
int arr[n]; //c99 only

多维数组:
数组可以有任意维数,超过一维的叫多维数组
多维数组定义时,会有多个[],同时必须指定最右边的长度
多维数组定义:
        int arr[][5];
        int arr[2][3][4];
多维数组在内存中也是一片连续的内存, 当使用静态初始化时,需要有多层的{}.
二维数组的定义:
        int arr[m][n]; //m和n就是行列
        int arr[2][3] = {{0},{0}};

0x02 函数

函数简单就是一系列语句的组合,通过使用函数,就能使用这一系列语句
定义语法:
        返回值类型 函数名(形参){/*函数体 Code*/}
如果省略返回值类型,C89会假定返回int,C99中不能省略返回值类型,另函数不能返回数组
函数用return 语句返回数据,返回类型是void表示没有返回值.

函数申明:
显示申明:
函数放在main之前,main函数执行后,碰到函数调用,函数的返回类型可以被程序解释到……

隐式申明:
程序从main函数开始执行,碰到函数调用,这个函数没有放在main函数之前,程序不认识这个函数
程序就会将这个函数返回类型固定为int(有时候会出错)

形参和实参:
        形参:函数声明和定义时,写在大括号中的参数
        实参:调用函数时,需要参入的实际参数

函数的终止:
return 表达式; //用于返回函数的结果,返回类型不匹配,会隐式转换
exit(0); //结束当前程序,需要使用stdlib.h的头文件