数组1。。

本文介绍了C语言中数组的基本概念,包括一维数组和二维数组的创建、初始化及使用方法。强调了数组下标从0开始,内存中连续存储的特点,并讨论了数组越界问题和作为函数参数时的注意事项。同时,提到了冒泡排序算法在处理数组时的效率问题。
摘要由CSDN通过智能技术生成

1.数组的概念

在c语言中,当我们想要一次性存放一组同类型的数据,就要使用数组。 

 1.1数组的创建

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

 

变长数组是不能初始化的!

 在vscode上的运行结果

 1.2数组的初始化

数组的初始化是指在创建数组的同时给数组的内容一些合理初始值(初始化)。

完全初始化:

 

也可以只初始化一部分数组中的元素,称为不完全初始化

 不完全初始化剩余的元素默认值为0

 

创建数组元素全为0 

 

错误的创建:

 既不初始化数组大小,也不初始化数组中的元素

字符数组的创建

用字符串创建字符数组

 这种创建方式数组中的元素会额外包含‘\0’

 这种则不会

将‘b'替换成其   ASC||值 98,结果也一样

1.3一维数组的使用

 数组的每一个元素都有唯一下标与之对应,下标是从0开始的。

数组元素的引用 

 打印数字的全部元素

倒序打印for(i=sz-1;i>=0;i--)

总结:1.数组是使用下标来访问的,而下标是从0开始的。

 2.数组的大小可以通过计算得到,sz=sizeof(arr)-sizeof(arr[0])

 

 打印出各元素的地址:printf("&arr[%d]=%p\n",i,&arr[i])

printf 函数族中对于%p一般以十六进制整数方式输出指针的值

地址间的差值也为4 ,因为这里的每一个元素占四个字节

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

 

 在栈帧空间开辟过程中,是由高地址到低地址,而在数组内部内存中则是由低到高存放

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

2.1二维数组的创建

 2.2二维数组的初始化

 方式2:

 不完全初始化,想怎么括号怎么括号,不够一行的自动用0补齐

行可以省略,列不能省略 

2.3二维数组的使用

            

 二维数组的行和列也都是从0开始的,原理与一维数组相同。

打印二维数组中的全部元素,采用嵌套循环

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

 二维数组在内存中也是连续存放的

 因此一行中有几个元素是必须确定的

 

可以将二维数组看作一维数组的数组 

 

3.数组越界

 示例

 编译器不报错,不意味着程序就是正确的

4.数组作为函数参数

将数组作为参数传递,比如要实现一个冒泡排序

冒泡排序的原理

 

监视中arr,10能够观察arr中的所有元素

 这样的传参,传送的是地址,地址大小为4,因此函数内计算出的sz是错误的

解决办法:不在函数内计算sz,在函数外计算好sz的大小传参进去(见代码)

4.2数组名的理解

 

 数组的地址和数组首元素的地址值上一样

 

 &arr+1的地址跳过了整个数组,因此值上加整个数组的大小

当数组本身有一定的顺序的时候,这样的冒泡排序会重复做无用功

优化:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值