C语言数组课件,c语言数组应用例题
目录
一维数组
二维数组
第三,数组越界了
四。阵列的名称是什么?
第五,冒泡排序
[前言]
这个数组没有什么特别难理解的,所以很容易使用。这里我再补充一些容易出错的小知识点,简单易懂。
一、一维数组的定义:数组是同一类型的元素的集合。
type _ t arr _ name[const _ n];
//type_t:数组元素类型
//arr_name:数组名
//const_n:常量表达式,用于指定数组的大小。数组创建的错误演示:
int const=10
int arr[const];//注意,这样写是不对的。
【敲黑板】:C99标准之前,可以在[]中给一个常数,不能用变量。C99以后,支持变长数组的概念。数组的大小可以是可变的,但要求编译器支持C99标准。但是很多编译器对C99的支持不够好,所以你一定知道我想说什么。
注意,要特别注意字符数组:
比如:
char arr2[3]={a , b , c };
//注意结尾没有\0
sizeof(arr2) - 3
乱码!
【敲黑板】:注意strlen()和sizeof的对比。
Strlen()是一个库函数,计算字符串的长度,只能作用于字符串。重点是字符串中是否有\0,计算字符串\0前的字符数;Zeof是一个运算符。sizeof用于计算变量占用的空间。任何类型都可以。它只关注空间大小,不考虑内存中是否有\0,单位是字节。
总结:
使用下标访问数组,下标从0开始;可以计算数组的大小。
int arr[10];
int SZ=sizeof(arr)/sizeof(arr[0]);//40/4==10
[敲黑板]:
一维数组在内存中连续存储;随着数组下标的增加,地址从低变到高。
二维数组二维数组在数学上叫做矩阵。
请注意,二维数组的初始化不同于一维数组的初始化:
比如:
int arr[][4];//正确(行可以省略)
int arr[][];//错误(不得省略列)
内存中的二维数组存储:也是连续存储!
二维数组可以理解为一维数组的数组,二维数组也是连续存储在内存中的。如果省略列数,则不知道每行有多少个元素,也不知道第一行在哪里结束,因此不知道第二行应该放在第一行的哪里。
第三,数组越界了
数组的下标有范围限制。规定数组下标从0开始。如果数组有N个元素,那么最后一个元素的下标是N-1。因此,如果数组的下标小于0或大于N-1,则是超出数组合法空间的越界访问。
c本身不检查数组下标越界,编译器也不一定报错,但是编译器不报错不代表程序正确。此外,二维数组的行和列可能超出界限。
比如:
int arr[10]={1,2,3,4,5,6,7,8,9,10 };
for(int I=0;i=10我)
{
arr[I]=0;//当i==10时,为越界访问!
}四。阵列的名称是什么?
通常,数组名是第一个元素的地址,但有两种特殊情况:
Zeof(数组名):计算整个数组的sizeof,此时的数组名代表整个数组;数组名:检索整个数组的地址,此时的数组名代表整个数组。除了上面两种情况,所有数组名都表示数组第一个元素的地址!
第五,冒泡排序
以升序为例,每次冒泡排序都是放最大的元素。
到最后一道工序。
void bubble_sort(int* arr,int sz)
{
int I=0;
for(I=0;I SZ-1;I )//冒泡排序的遍数与元素个数有关。
{
int j=0;
for(j=0;j SZ-I-1;J )//比较的对数每次旅行都不一样,都在变化。
{
If (arr[j] arr[j 1])//以升序为例
{
int temp=arr[j];
arr[j]=arr[j 1];
arr[j 1]=temp;
}
}
}
}
安然无恙。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。