这是一篇介绍数组基础操作的文章,包含数组的初始化、存储方式、用作函数参数以及常见的一些错误。
一、数组的定义及使用
数组为相同类型的元素的集合,常用于存储较多数目的数字及字符串等。
- 例如定义十个整型变量,分别初始化为1,2,3,4,5,6,7,8,9,10;
//定义十个变量名,分别初始化;
int a = 1, b = 2, c = 3;//····过于繁复
//采用数组
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//变得简单好调用
数组的创建方式
type_t arr_name [const_n];
//type_t 指数组的类型
//[]内表示为常量。
99年发布的C99标准支持变长数组定义,而在11年发布的C11又取消了对变长数组的支持,看似方便的变长数组,却会导致更多的问题->C语言中变长数组的陷阱 故而在创建数组时,[]中只可为常量,(或const修饰的常变量,C不支持,而C++支持)
数组的初始化
- 赋值初始化
int a[] = {1, 2, 3, 4, 5};//数组名为a,数据类型为整型,其中包含5个元素。
char b[] = {'h''e''l''l''o'};//数组名为b,数据类型为字符型,其中包含5个元素。
char c[] = {"hello"};//数组名为c,数据类型为字符型,其中包含6个元素'h'
//'e''l''l''o''\0'(字符串以'\0'作为结束标志)。
- 指定大小初始化
int a[10] = { 0 };//数组名为a,数据类型为整型,包含10个元素,全部初始化为0;
char b[10] = { 0 };//数组名为b,数据类型为字符型,包含10个元素,都为'\0',ASCII码值为0的字符。
使用
-
操作符 [ ]数组中的下标引用操作符。
-
大小计算
//运用sizeof计算
int sz = sizeof(a) / sizeof(a[0]);//sz为即为整型数组a的大小
- 运用操作符,使用下标修改其中的某一个值
a[0] = 1;//即将数组a中下标为0的元素值改为1。为数组a中第一个元素
二、数组的存储
数组在内存中连续存放,数组名即为数组中第一个元素的地址。因而便可以通过下标得以计算出每个元素的地址。
三、常见错误
- 二维数组的初始化
//二维数组的初始化,可省略行,但不可省略列
int a[][3] = {1,2,3,4,5,6};//表示2行3列的数组a
若省略列,则操作系统便不知道给每一个一维数组分配多少元素,从而导致歧义。
- 数组的传址调用
//数组的大小需在其定义的函数中计算,不可在其他函数中计算,如:
#include<stdio.h>
int test(int* a[])
{
int sz = sizeof(a)/sizeof(a[0]);
printf("test中计算大小为%d\n", sz);
}
int main()
{
int a[10] = { 0 };
int sz = sizeof(a) / sizeof(a[10]);
printf("main中计算大小为%d\n", sz);
test(a);
return 0;
}
函数结果为
由此可知,
- 在传参调用数组时,a仅作为数组首元素的地址被传至函数中,并不可表示数组整体;
- 调用函数时,由于a本身便是地址(指针变量),故也不需&符;
- 在以[下标]调用数组时,也会因为下标使用不当导致越界。