Day6-二维数组,冒泡排序解析,数组为参数的传递

数组:存放一组数据 


两种初始化:静态初始化与动态初始化


静态初始化:指定个数,但没有全部初始化,则剩下的自动为0 :a[4]={};

  制定个数,并全部初始化

制定个数,但没有初始化,则全部为0,但注意 是有了“ { }”,表明是静态初始化 

  指定个数,并指定下表初始化,则没有初始化部分为0


动态初始化:指定个数,挨个赋值

    指定个数,初始化一部分,则剩余的值不确定


越界后的结果难以预料


%p 用于十六进制输出,而地址的输出就是十六进制输出,输出时0x代表后面的数字是十六进制数字


数组中的元素的地址是连续的


数组名的地址=首元素的地址=数组的地址=数组名


计算数组的元素数量:数组的总字节数 / 单个元素类型的字节数 = 数组的长度

如: a[5]={}; sizeofa/ sizeof(int) 其中a代表数组的首地址,所以sizeof会自动算出这个数组的总长度

但是,若将a作为指针传送则不行,因为它是将a当成一个指针传送过去,所以sizeofa)算出来的值是作为指针的a的长度


数组的元素可以作为函数的参数:元素是变量,数组名与首地址是常量,但元素有个确切的值


数组的元素作为函数的参数与普通的变量作为函数的参数是一样的,因为虽是变量但有一个确切的值


数组名是一个常量,它的值是数组的首地址,其值不可改变,但里面的内容可以改变


void a(int a[],int length); 其中int a[]是数组的形参,lengthint型的形参,学完指针后,会已int * a来代替数组的形参,而且接受的时候,其实也是已指针形式接收


传递的如果是个地址,则函数内会修改的是地址内的值,而如果传递的是一个值,则修改的是复制过来的值,而不是地址内的值,所以结果或许会有些与预想的偏差 这就是值传递与地址传递 

值传递与地址传递的区分:看传递的是变量本身还是地址,


仅用两个变量彼此值交换

A=A+B;

B=A-B;

A=A-B;


冒泡排序:因为要分轮,且每轮比较次数不同,所以用双层for循环计算,第一个for代表比较轮数 第二个for代表每一轮比较次数,与每次哪两个值比较

简解:

轮数为len-1次,如a[6],五轮确认五个数,则剩下一个数就自然确定了

次数为len-1-i,其中i代表轮数,因为i值通常取0,但第一轮的比较次数就为len-1次,所以为len-1-i

详解:

Len代表数组长度,则比较轮数为len-1,因为六个数比较五轮,每轮确认一个数,则五轮确认五个数,在前后两数比较中,后面的数都比前面大,则最前面的最后一个数自然就确定了

若轮数i的初始值为0,则比较次数为Len-1-i次,因为每过一轮,确认一个数,所以经过i轮确认i个数,第一轮比较次数为len-1 再第二轮比较次数为len-2,但用来表示轮数的i值通常取初值为0,所以比较的次数为len-1-i,1是当i0时,也要比较Len-1次,每一轮,比较次数减一,即为len-1-i,i为递增数

ps:a[0]a[1]比较到a[len-1]a[len],因为下表要从开始用j来表示,即为a[j]a[j+1],所以比较到len-1次时,a[len-1]a[len]

轮跟长度有关,次数跟轮有关,下标跟次数有关




二维数组 a[m][n]m个一维数组,每个数组有n个元素,总共有m*n个元素。

二维数组的静态赋值:

连续赋值遵循一维数组的静态赋值 int a[2][2]={0,1};剩余部分为0

分段赋值,a[2][4] = {{12}{12}};缺少部分补0

动态赋值:依旧是一个一个赋值


在静态初始化中,行可以不写,列必须写,因为列可以算出

在动态初始化中,啥都不能省略


双重for循环输出二维数组的值


Xcode中,可以用变量来指定数组的长度,其它平台不行


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值