c语言数组

1、数组的用处

为什么要使用数组?

在C语言中,很多时候需要用到很多相同类型的数据,如果把这些数据保存在不同的变量中,那就需要定义很多这样的变量,在这个时候,就可以使用数组,将这些数据放在数组中。

2、数组的声明

数据类型 数组名[元素个数];

如:

int arr1[10]; //声明一个整型数组,可以存放最多10个整型数据

float arr2[5]; //声明一个float数组,可以存放最多5个float数据

char arr3[100]; 声明一个char数组,可以存放最多100个char数据

【注意】如果只是对数组进行声明,必须写明数组的元素个数,如int arr[ ]是错误的。

3、数组的初始化

①int a[5] = {1,2,3,4,5}; //对数组整体赋值

int a[5];

a[5] = {1,2,3,4,5}; //如果声明数组时没有初始化,那么之后就不能对数组进行整体赋值

②int a[ ] = {1,2,3,4,5}; //初始化数组时,元素个数可以省略

③int a[5]= {1,2,3}; //部分初始化,没有赋值的元素的值为0

④int a[5] = {0}; //五个元素值为0

⑤int a[5]; //五个元素值为随机数

可变长数组:

int n;

scanf("%d",&n);

int a[n]; //可变长数组不能再直接初始化,如:int a[n] = {0}是错误的

4、访问数组元素

通过数组名+数组下标进行访问数组元素

数组下标的范围:0~元素个数-1

int arr[5] = {1,2,3,4,5};

arr[2]-->3

arr[4]-->5

arr[5]-->?

【注意】在C/C++中编译器不会对数组做越界检测,所以arr[5]这个写法是可以通过编译的,但是运行结果是未知的,有可能得到一个随机数,也有可能导致程序段错误。

练习:定义一个包含10个整型数据的数组

要求:

①从键盘输入数据对数组赋值

②计算并打印数组元素的最大值,最小值和平均值

  1. 字符数组

char str[5] = {'1','2','3','4','5'}; //字符数组   

等价于char str[5] = {49,50,51,52,53};

char str[10];

输入:scanf("%s",str);

输出:printf("%s",str);

int arr[5] = {1,2,3,4,5};

【注意】str本身就是一个数组名,等价于首元素的地址,即在一维数组中str ==&str[0];

字符数组可以通过%s连续输入输出,原因是字符数组的每个元素是一个字节,是连续的。

在C语言中,可以用字符数组来表示字符串,字符串用双引号括起来,都是以\0结尾的。

char str[10] = {'1','2','3','4','5'};等价于char str[10] = "12345";

char str[10] = {'1','2','3','4','5','\0'};等价于char str[10] = "12345";

6、一维数组名

int arr[5]; //arr是数组名

(1)数组名arr表示首元素(arr[0])地址,即:arr ====&arr[0]

(2)&arr是整个数组的地址

163、若有以下定义和语句,则对

m数组元素地址的正确引用是(B)

int m[2][3], (*p)[3] ;p=m;

A、p[2]       //&p[2][0]

B、p[0]+1    //&p[0][1];

C、*(p+2)    //等价于p[2];

D、(p+1)+2 //&p[3];

7、数组作为函数的参数

方式1:【推荐】

void func(int *arr,int len) //数组作为函数的参数使,一般要额外传数组的长度(除char外)

{

}

方式2:

void func(int arr[10])

{

}

方式3:

void func(int arr[])

{

}

调用:

int arr[10] = {1,2,3,4,5,6,7,8,9,10};

func(arr);

【注意】数组作为函数的参数时,会自动退化为指针。所以int *arr;int arr[10];int arr[];都只占八个字节;

8、数组作为函数的返回值

int* func(void)

{

static int arr[5] = {1,2,3,4,5};

return arr;

}

【注意】函数中不能返回一个局部变量数组,要返回数组,可以在数组声明时加上static

9、二维数组

(1)声明:数据类型 数组名[m][n];

如:int arr[3][2]; //3,表示有3个一维数组,2,表示每个一维数组最多存放2个元素

3个一维数组:arr[0]、arr[1]、arr[2]

6个元素:arr[0][0] arr[0][1] arr[1][0] arr[1][1] arr[2][0] arr[2][1]

(2)初始化

①int arr[3][2] = {1,2,3,4,5,6};

等价于int arr[3][2] = {{1,2},{3,4},{5,6}};

等价于int arr[ ][2] = {{1,2},{3,4},{5,6}};

②int arr[3][2] = {1,2,3};

等价于int arr[3][2] = {{1,2},{3,0},{0,0}};

【注意】二维数组的第一个元素个数可以省略,但是第二个不能省略;

字符二维数组:

char str[3][10] = {"www","baidu","com"};

str[0]--->"www"

str[1]--->"baidu"

str[2]--->"com"

10、二维数组名

int arr[3][2];

arr 二维数组名,地址

arr[0] 第一个一维数组名,地址

arr[0][0] 第一个一维数组的第一个元素

&arr[0] 整个第一个一维数组的地址

&arr[0][0] 第一个一维数组的第一个元素地址

arr ==== &arr[0]

arr[0] ==== &arr[0][0]

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值