首先数组的定义是一系列类型相同的元素构成
数组的声明
int arr[10]; //数组的元素类型是int,大小是10个
数组的初始化
int arr[5] ={0, 1, 2, 3, 4}; //大括号包围,中间每个元素用逗号隔开
使用for循环为数组赋值
for(int i =0; i <(sizeof(arr)/sizeof(arr[0]));i++){
arr[i] = value;
} //sizeof()部分是为为了计算数组部分
注意c中只允许初始化时赋值,不允许把数组作为一个整体赋值,也不支持花括号括起来的列表赋值(初始化除外),也就是下面的意思
int arr[4];
arr[4] ={1, 2, 3, 4}; //不允许的
c中要是不给数组初始化,数组会存放一些无用的值,但是如果给数组初始化一部分,那么其余部分自动初始化为0
生命一个不能改变的数组,就是数组中的值不能改变,用const修饰符
const int arr[10] ={1, 2, 4, 5, 6, 7, 8, 3, 2, 11}
数组的大小,就是中括号中的值必须是一个整数常量,但是const,不是整数常量
c99中引入了变长数组VLA
int n =5;
int arr[n];
数组和指针的关系
数组名就是地址,也就是数组中第一个元素的地址,对于一维数组
int arr[2] = {1, 2}
int *p = arr;
如果把一个数组传递给函数,那么函数的形参可以使用数组和指针俩种形式,求数组中所有元素和
int sum(int *p) //指针形式
int sum(int arr[]) //数组形式
一般对指针进行+1,等操作,加的是一个数组元素类型字节,而不是1个字节,通常+1表示下一个数组元素的地址
多维数组与指针
int arr[2][2] ={{1,2},{3,4}};
数组名也是地址arr,同样arr[0]也是地址,arr[0][0]也是地址,用指针声明一个二维数组
int (*p)[num]; //指向包含num个int值的数组
不能像下面这样声明
int *p[num];//这个意思是p指向num个指向int指针组成的数组,也就是把数组声明为int*型,也就是指针,数组形式的参数是int [][num];第一个[]为空表示的是指针,但是后一个[]不能为空
最后讲一下const,能把非const类型付给const,但是不能把const类型付给非const类型
网友评论