设计新闻发布网站模板,交互设计产品,东莞市建设网,重庆企业vi设计公司目录9. 数组9.1 数组的定义9.2 数组与指针的区别9.3 数组大小计算9.4 数组的赋值9.5多维数组寻址方式9.6 函数数组9. 数组
9.1 数组的定义
C 语言支持数组数据结构#xff0c;它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据#xff0c;但它往往…
目录9. 数组9.1 数组的定义9.2 数组与指针的区别9.3 数组大小计算9.4 数组的赋值9.5多维数组寻址方式9.6 函数数组9. 数组
9.1 数组的定义
C 语言支持数组数据结构它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据但它往往被认为是一系列相同类型的变量。
9.2 数组与指针的区别
指针也是一个变量存储的数据是地址。
数组名代表的是该数组最开始的一个元素的地址。
区别指针是一个变量可以进行数值运算。数组名不是变量不可以进行数值运算。
char *strHello;
char arrgs[]Hello;字符数组: char *p(char*)arrgs char *parrgs ;
char *p(char*)((arrgs[0])) arrgs arrgs;字符串指针: char *p(char*)str ! str; strstr[0] H结论 字符数组的 首地址可以用 arrgs arrgs,来表示并且它们相等但是指针str和str是不同的,当遇到字符串指针时候要注意处理方式。
9.3 数组大小计算
在我们没有明确数组的元素个数时在程序中想知道数组单元个数可以使用 sizeof(a)/sizeof(a[0]), sizeof(a) 是得到数组 a 的大小sizeof(a[0]) 是得到数组 a 中单个元素的大小因此可以不必要是a[0],a[i]都行。
9.4 数组的赋值
对于数组的初始化需要注意以下几点
可以只给部分元素赋值当 { } 中值的个数少于元素个数时只给前面部分元素赋值。例如
int a[10]{12, 19, 22 , 993, 344};表示只给 a[0]~a[4] 5 个元素赋值而后面 5 个元素自动初始化为 0。
当赋值的元素少于数组总体元素的时候不同类型剩余的元素自动初始化值说明如下
对于 short、int、long就是整数 0对于 char就是字符 ‘\0’对于 float、double就是小数 0.0。
我们可以通过下面的形式将数组的所有元素初始化为 0
int nums[10] {0};
char str[10] {0};
float scores[10] {0.0};由于剩余的元素会自动初始化为 0所以只需要给第 0 个元素赋值为 0 即可。
只能给元素逐个赋值不能给数组整体赋值。例如给 10 个元素全部赋值为 1只能写作
int a[10] {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
char a[]hello!; // 这样赋值之后在结尾会自动加上\0。
char a1[]{h,e,l,l,o,!}; // 这样赋值是整整好好的6个空间不会自动加上\0
所以比较的话a 的长度比 a1 的要大。而不能写作
int a[10] 1;9.5多维数组寻址方式
二维数组当作参数的时候必须指明所有维数大小或者省略第一维的但是不能省略第二维或者更高维的大小这是由编译器原理限制的。事实上编译器是这样处理数组的
设有数组 int a[m][n]如果要访问 a[i][j ]的值编译器的寻址方式为。
a[i][j]a[0][0]i*sizeof(int)*nj*sizeof(int); // 注意 n 为第二维的维数因此可以省略第一维的维数不能省略其他维的维数。
在定义二维数组的时候对其进行初始化也可以省略第一维编译器会根据你的初始化语句自动决定第一维度。
9.6 函数数组
将几个返回类型相同的函数定义到函数数组中通过函数数组指针来调用
//声明
static U1 (* const TBL_DIM_OUT[DIM_WELCOME_NUM])(void) {u1_DimexcontOut, /* 室内照明函数 */u1_DimptrOut, /* 点照明函数 */u1_DimlitOut, /* 文字盤照明函数 */u1_DimfueltempOut /* 油表和温度照明函数 */
};//调用
for(u1_cnt (U1)0; u1_cnt (U1)DIM_WELCOME_NUM; u1_cnt){//依次调用这些函数u1_dimout | TBL_DIM_OUT[u1_cnt]();}