目录
一、数组的创建
结构:元素类型+数组名称+常量表达式
错误示范: int count=10;
int arr[count];
#include <stdio.h>
int main()
{
int arr1[10]={1,2,3};//不完全初始化,剩下的的元素默认初始化为0。
char arr2[5]={'a','b','c'};
char arr3[5]="abc";//默认后带\0
char arr4[]="abc";
printf("%d\n",sizeof(arr4));//sizeof计算arr4所占空间的大小。
printf("%d",strlen(arr4));//strlen求字符串的长度——\0之前字符个数。
return 0;
}
知识补充:
1.strlen是求字符串长度的,只能针对字符串长度,使用需引头文件。
2.sizeof计算变量,数组,类型的大小,单位是字节,属于操作符。
#include<stdio.h>
int main()
{
char arr1[]="abc";
char arr2[]={'a','b','c'};
printf("%d\n",sizeof(arr1));//4
printf("%d\n",sizeof(arr2));//3
printf("%d\n",strlen(arr1));//3
printf("%d\n",strlen(arr2));//随机值
return 0;
}
arr1: a b c \0
arr2: a b c
二、一维数组的使用
[ ],下标引用操作符。
#include<stdio.h>
int main()
{
char arr1[]="abcdef";//实际上是[a][b][c][d][e][f][\0]o
//打印c
printf("%c\n",arr1[3]);//[ ]里的3是下标
//打印字符数组abcdef
int i=0;
for(i=0;i<6;i++)//或者strlen(arr)
{
printf("%c",arr1[i]);
}
//打印整形数组(包含计算元素个数)
int arr2[]={1,2,3,4,5,6,7,8,9,0};
int sz=sizeof(arr2)/sizeof(arr2[0]);
printf("\n%d",arr2);
return 0;
}
三、二维数组的使用
#include<stdio.h>
int main()
{
//int arr1[3][4]三行四列
//char arr2[5][6];五行六列
//int arr1[3][4]={1,2,3,4,5};
int arr2[3][4]={1,2,3,4,5,6,7,8};
int i=0;
for(i=0;i<3;i++)
{
int j=0;
for(j=0;j<4;j++)
{
printf("%d ",arr2[i][j]);
}
printf("\n");
}
return 0;
}
效果如下:
四、数组作为函数参数
1.冒泡排序 Bubble sort
① 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
② 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
③ 针对所有的元素重复以上的步骤,除了最后一个。
④ 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
#include<stdio.h>
void bubble_sort(int arr[],int sz)
{
//确定元素排序趟数
int i=0;
for(i=0;i<sz-1;i++)
{
//每一趟冒泡排序
int Sort_correctly=1;//假设这一趟排序正确。!!!
int j=0;
for(j=0;j<sz-1-i;j++)
{
if(arr[j]>arr[j+1])
{
int tmp=arr[j];//交换
arr[j]=arr[j+1];
arr[j+1]=tmp;
Sort_correctly=0;//这一趟交换不完全有序!!!
}
}
if(Sort_correctly==1)//!!!
break;//跳出第一个for循环!!!
}
}
int main()
{
int arr[]={0,1,2,3,5,6,4,7,8,9};
//排成升序。
int sz=sizeof(arr)/sizeof(arr[0]);//10
bubble_sort(arr,sz);//冒泡排序函数,转上
//打印排好序后数组的每一个元素
int i=0;
for(i=0;i<sz;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
!!! 部分是对代码的优化,能使计算量减少。
例如arr[]={0,1,2,3,4,5,6,7,9,8}优化后就不用从头到尾。
2.数组名
一般情况下,数组名代表受元素地址。
有两种例外:
- 一sizeof(数组名) 表示整个数组 sizeof计算的是整个数组的大小,单位是字节2。
- &数组名,数组名代表整个数组。&数组名,取出的是整个数组的地址。
#include<stdio.h>
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9};
printf("%p\n",arr);//打印地址。
printf("%p\n",&arr[0]);//与上部相同
printf("%d\n",*arr);//解地址,验证为1
return 0;
}
谢谢光临!