C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C语言 数组

C语言修炼之路悟彻数组真妙理 巧用下标破万敌下篇

作者:玄澈_

在C语言和C++等语言中,数组元素全为指针变量的数组称为指针数组,指针数组中的元素都必须具有相同的存储类型、指向相同数据类型的指针变量。指针数组比较适合用来指向若干个字符串,使字符串处理更加方便、灵活

(壹)冒泡排序

1.1冒泡排序的设计

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。

1.2冒泡排序的步骤

📺动图演示1(数据较小)

📺动图演示2(数据较大)

1.3冒泡排序的实现

Tips:每一趟冒泡排序后都会减少一个需要比较的数 -->  因为每一趟的冒泡排序都会将所比较的最大/最小值移动到数组的最后面

(贰)数组作为函数参数

往往我们在写代码的时候,会将数组作为参数传个函数,比如:我要实现一个冒泡排序(这里要讲算法思想)函数将一个整形数组排序。 那我们将会这样使用该函数:

2.1冒泡排序函数的错误设计

接下来看一个例子

最后结果:

并没有预料中的达到排序的作用

在我们之前的学习中,我们知道了 数组名表示的数组首元素的地址 

数组名在传递给函数的时候,会降级变成首元素的地址

数组名单独放在sizeof内部的时候 ,如:sizeof(arr),这里的arr表示整个数组而不是首元素的地址

对数组名进行&取地址后的操作

我们知道,对指向数组元素的指针进行自增运算是跳过一个元素(所占字节数的地址),其实本质是跳过一个其指针类型大小。对数组名进行取地址后获得的是数组的地址,如果将它和数组首元素地址以及数组名打印出来,会发现它们的值是一样的。但如果对&arr进行+1等操作,就会发现跳过的不是一个元素的大小,而是一个数组的大小。

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

当数组传参的时候,实际上只是把数组的首元素的地址传递过去了。所以即使在函数参数部分写成数组的形式:int arr[]表示的依然是一个指针:int *arr。那么,函数内部的sizeof(arr)结果是4。

(叁)对数组名的拓展解析

数组名就是首元素的地址,但是有两个例外

 &arr取出的是整个数组的地址,所以 arr + 1后跳过了整个数组的大小为 

4 * 10 = 40 个字节的地址大小

C游记之旅至此,大家也掌握了一定的技能,推荐大家可以跟着下面这篇文章,去实现一个属于自己的三子棋游戏哦 

【入门级C语言小游戏】——“三子棋” 

到此这篇关于C语言修炼之路悟彻数组真妙理 巧用下标破万敌下篇的文章就介绍到这了,更多相关C语言 数组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文