数组作为函数参数

  • 冒泡排序函数的正确设计


    当数组传参的时候,实际上只是把数组的首元素的地址传递过去
  • 冒泡排序()


    冒泡排序的思想:两两相邻的元素进行比较,并且可能的话需要交换!
    一趟冒泡排序解决一个数
    10个数字要进行9趟冒泡排序
    n ---- n-1趟
    第一趟:十个数字待排序 9对比较
    第二趟:九个数字待排序 八队比较
    确定躺数
    经典错误,会心一笑
    交换tmp经典
    数组传参的时候,传递的其实是数组首元素的地址
    导致sz = 1 求好再给我传过来
    如何传
    在创建的时候,将int sz放进()
    这样才对了
    • 这个代码效率不高:


      我总是在比较,只是没有交换而已,我们只要做一次分析
      如果我们发现他们有序,就不用比较
      已经有序,不用冒泡
      引入flag,只要交换flag =0;
      iflag=1就没有进行交换,说明这一队已经有序,不用冒泡排序
      if() break;
      ​王同学:我们现在在交换两个变量的值
      只要创建一个临时变量就行了
      地址不能随便交换
      地址是个编号,是个门牌号0x00121
      把教室的两批同学交换但是你不能交换两个教室的门牌号啊

  • 数组名是什么


    首元素的地址
    果然是这样的
    找茬
    int sz = sizeof (arr);
    printf("%d",sz);
    有两个例外
    1.sizeof(数组名) - 数组名表示整个数组-计算的是整个数组的大小单位是字节
    2.&数组名-数组名代表整个数组-取出的是整个数组的地址
    正常情况下数组名都是首元素的地址
    但是呢
    printf("%p",&arr);第一种
    printf("%p",arr);第二种
    printf("%p",&arr[0]);第三种
    0x28 就是2*16的一次方加上2*16的零次方
    32+8=40

    第一种和第二种结果都一样,以为讲错了
    其实没讲错
    值一样,意义不一样
    第一种&arr取出的是数组的地址
    数组地址加一和数组首元素地址加一不一样
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值