(一)、一维数组:
定义:类型说明符 数组名[整型常量表达式];
类型说明符:可以是 int (整型)、char(字符型)、float(浮点型) 等基本数据类型。
数组名:(1)使用标识符表示。(2)数组名可作为数组第一个元素的地址,在函数实参传入形参的过程中,只是传入第一个元素的地址,而不是传入一个数组。
整型常量表达式:表示数组大小或数组里面的元素个数。整型常量表达式中不允许包含变量
例如:int arr[20]; char arr[10]; float arr[];
定义了一个大小为20、数组名为arr的整型数组,数组中每个数组元素都是整型变量。
定义了一个大小为10、数组名为arr的字符型数组,数组中每个数组元素都是字符型变量。
定义了一个大小未定、数组名为arr的浮点型数组,数组中每个数组元素都是浮点型变量。
初始化:完全初始化、不完全初始化。
例如:(1) int arr[20]={1,2,3,4,5,6,7,8,9,0}; (2) char arr[4]="abc"; (3) char arr[3]={'a','b','c'};
其中:(1)属于不完全初始化,一个整型变量占用4个字节,共20*4=80个字节,占40个字节(2)和(3)属于完全初始化,一个字符变量占用1个字节,“abc”字符串占4个字节,字符占3个字节。
另:strlen函数:求的是字符串长度,只识别‘\0’之前的字符串个数,不能求字符的个数。
sizeof函数:求的是字符串和字符所占空间的大小,单位是字节。对于字符串,是把‘‘\0’算进去了的。而字符却没有。
#include<stdio.h>
int main()
{
int arr[]="abc";
int arr2[]={'a','b','c'};
printf("%d",sizeof(arr));
printf("%d",sizeof(arr2));
printf("%d",strlen(arr));
printf("%d",strlen(arr2));
return 0;
}
//依次输出为:4 3 3 随机数。
下标变量的引用:
形式: 数组名[下标]
1、下标可以是常量、变量、表达式,但必须是整型数。且数组下标从0开始,则下标取值应从【0~数组长度-1】。
2、数组元素个数:sz=sizeof(arr)/sizeof(arr[0])来求得。
3、[ ]:下标引用操作符。
(二)、二维数组:
定义:类型说明符 数组名[整型常量表达式][整型常量表达式];
例如:int arr[3][5]; 定义了一个三行五列的二维数组。
初始化:完全初始化、不完全初始化。
例如:(1) int arr[3][4]={123412341234}; (2) int arr2[][3]="abcd"; (3) int arr3[3][4]={{1234}{5}{6}};
(1)属于完全初始化。(2)(3)属于不完全初始化。
注:确定数组大小的时候不得省略列。
下标变量的引用:
//依次打印二维数组的元素在屏幕上//
#include<stdio.h>
int main()
{
int arr[3][4]={{123}{4}{5}};
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
{
printf("%d",arr[i][j]);
}
printf("\n");
}
return 0;
}
(三)、冒泡排序:
例如:给定一个无序数组,将其从小到大进行排序。如:arr[]={546324};
#include<stdio.h>
void bubble_sort(int arr[],int sz)
{
for(int i=0;i<sz-1;i++)//i表示趟数,共6个元素,需要循环6-1=5趟才能交换完成
{
for(int j=0;j<sz-1-i;j++)//j表示第i趟的所需的比较次数,第i趟最多需要6-i-1次能比较完成。
{
if(arr[j]>arr[j+1])
{
int temp=0;
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
int main()
{
int arr[]={5,4,6,3,2,4};
int sz=sizeof(arr)/sizeof(arr[0]);
bubble_sort(arr,sz);
for(int i=0;i<sz;i++)
{
printf("%d",arr[i]);//打印完成交换后的数
}
return 0;
}
(四)、数组名绝大部分表示数组首元素地址,但除了两种情况以外:
1、sizeof后面加个数组名。如:sizeof(arr)则表示求整个数组的大小-单位是字节。
2、&数组名,表示求整个数组的地址。