c初始之数组

1.一维数组的创建和初始化

1.1数组创建

数组:是一组相同类型元素的集合

创建方式:

type_t arr_name [const_n]

//type_t是值数组的元素类型 ,arr_name是数组名,const_n是一个常量表达式,用来指定数组的大小。注:在c99中支持变长数组,即可用变量来指定数组大小,不支持c99的编译器则不能使用

1.2数组的初始化

初始化是指在创建数组的同时给数组的内容一些合理初始值,例:

int arr1[10] = {1,2,3};//不完全初始化,将数组前三个元素分别初始化为123,后面元素初始化为0

int arr2[] = {1,2,3,4}

int arr[10] = {0};

数组在创建的时候如果想不指定数组的确定的大小就得初始化。数组的元素个数根据初始化的内容

来确定。

1.3一维数组的使用

 1.4一维数组在内存中的存储

以一段代码为例:

我们发现数字首元素地址与下一位元素地址相差4,往后依次相差4,可知,随数组下标的增长,元素的地址也有规律的递增。于是我们得出结论:一维数组在内存中是连续存放的,数组地址由低地址向高地址递增。

2.二维数组的创建及初始化

2.1二维数组创建

int arr[3][4];

char arr[3][5];

2.2二维数组的初始化

int arr[3][4] = {1,2,3,4};  //其中[3]表示有三行,[4]表示有四列

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

 注:二维数组如果有初始化,行可以省略,但列不能省略。

二维数组同样可以通过下标去寻找元素。

2.3二维数组在内存中的存储

与一维数组一样,二维数组在内存中也是连续存储的

你想象中的二维数组

实际上的二维数组

 

这也是为什么行可以为空,但列不能为空。

3.数组越界 

数组下标在一个数组中是由界限的,数组下标规定从0开始,假定该数组有n个元素,那么它的范围就是[0——n-1】。如果下标小于0或者大于(n-1),那么就是数组越界访问。

c语言本身不做数组下标的越界检查,所以编译器不一定会报错,所以需要程序猿在写代码是注意自己的数组越界问题

4.数组作为函数参数

再写函数时,有时会将一个数组作为参数传给这个函数,以实现一个冒泡排序为例

当完成代码时发现结果并没有排序 ,这里就涉及到了数组名的概念:

数组名就是数组首元素地址(绝大多数情况下)
但存在两个例外:
1.sizeof(数组名),数组名不是数组首元素的地址,数组名表示整个数组,计算的是整个数组的大小
2.&数组名,数组名不是数组首元素地址,数组名表示整个数组,取出的是整个数组的地址

这里在main函数里,sizeof(arr)表示整个数组的大小,而传入bubble_sort函数中的arr,其实本质上是一个首元素地址,所以bubble_sort函数中求sz(元素个数)的求法错误。

正确写法:

 在main函数中提前求出sz,再将sz作为一个参数传入bubble_sort函数中即可解决问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值