【C语言

04-27 1406阅读 0评论

目录

前言

一、数组名的理解 

二、使用指针访问数组

三、一维数组传参的本质 

四、冒泡排序

五、二级指针

六、指针数组

七、指针数组模拟二维数组


前言

本篇主要讨论以下问题:

1. 数组名通常表示什么,有哪两种例外情况,在例外情况中数组名表示什么

2. 知道使用指针访问数组其实就是指针+-整数和指针解引用的应用

3. 知道 arr[i] 本质是 *(arr+i),即数组首元素的地址偏移后进行解引用

4. 一维数组传参的本质是什么,形参部分究竟有没有创建新的数组,数组的大小是否作为参数传递给被调函数以及为什么

5. 冒泡排序的规则是怎样的,怎样写一个冒泡排序

6. 什么是二级指针

7. 什么是指针数组

8. 怎样用指针数组模拟二维数组

一、数组名的理解 

1. 数组名通常表示数组首元素地址 (也可以理解为数组名是一个指针变量,里面存放着数组首元素的地址)。

2. 两个例外情况:

    ① sizeof(数组名):sizeof中单独放数组名,这里的数组名表示整个数组,sizeof计算的是整个数组的大小,单位是字节。

    ② &数组名:这里的数组名表示整个数组,取出的是整个数组的地址(整个数组的地址和数组首元素的地址数值上一样,但本身是有区别的,&数组名的指针类型是什么呢,后面会讲)

 【C语言 第1张

【C语言 第2张

二、使用指针访问数组

【C语言 第3张

【C语言 第4张

上图中,指针p就是arr,arr[i]表示的本质就是*(arr + i),由加法交换律可得arr[i] == i[arr]。 

三、一维数组传参的本质 

【C语言 第5张

1. 在数组传参的时候,传递的是数组名,也就是说数组传参本质上传递的是数组⾸元素的地址,也正是如此,在被调函数内部是没办法求得数组的元素个数的,因此在数组传参时通常会把数组的大小也一并传给被调函数。

2. ⼀维数组传参,形参的部分可以写成数组的形式,也可以写成指针的形式,但无论写成哪种形式,形参部分表示的都是一个指针,而不是数组 (形参部分并不会创建一个数组)。

四、冒泡排序

#include 
//用冒泡排序把一个整型数组排为升序
//冒泡排序:让相邻的两个元素比较,如果不满足顺序就交换
//每趟冒泡排序可以搞定"最后一个位置"上放的元素,sz个元素sz-1趟就能搞定
//每搞定一趟,最高比较的下标要-1
void BubbleSorrt(int arr[], int sz)
{
	//趟数
	int i = 0;
	for (i = 0; i  arr[j + 1])
			{
				int tmp = 0;
				tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
				flag = 0;//有交换,本趟一定不为全升序
			}
		}
		if (flag)
		{
			break;
		}
	}
}
void Print(int arr[], int sz)
{
	for (int i = 0; i  

五、二级指针

1. 二级指针是用来存放一级指针地址的指针变量。

2. 对二级指针解引用就可以找到其所指向的一级指针,对一级指针解引用就可以找到其所指向的变量。

 【C语言 第6张

六、指针数组

1.存放指针的数组叫指针数组,指针数组的每个元素都是相同类型的指针变量。

   例如,int* arr[10];、char* arr[5];、char** arr[8];

七、指针数组模拟二维数组

【C语言 第7张

【C语言 第8张

1. arr是数组arr首元素的地址,让arr偏移并解引用就可以找到arr数组中的每个元素,而arr数组中的每个元素是其他数组首元素的地址,对该地址偏移并解引用就可以找到数组arr1、arr2、arr3中的每个元素。

2. arr[0] == *(arr + 0) -->找到数组arr1首元素的地址,arr[0][0] == *(*(arr + 0) + 0),找到arr1中第一个元素。

    arr[1] == *(arr + 1) -->找到数组arr2首元素的地址,arr[1][0] == *(*(arr + 1) + 0),找到arr2中第一个元素。

    arr[2] == *(arr + 2) -->找到数组arr3首元素的地址,arr[2][0] == *(*(arr + 2) + 0),找到arr3中第一个元素。

  本篇文章已完结,谢谢支持!!!


免责声明
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明。
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所
提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何
损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在
转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并白负版权等法律责任。

手机扫描二维码访问

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,1406人围观)

还没有评论,来说两句吧...

目录[+]