1.数组概念
数组是一组相同元素的集合;数组中存放的是一个或多个数据,但是不能为0(也就是说不能为空集)数组中的数据类型是相同的。
数组分为一维数组和多维数组,多维数组中最常见的为二维数组。
2.一维数组的创建和初始化
数组在创建时可以指定数组的大小和数组的类型
类型可以是char short int long float double
至于名字,根据实际情况,有意义就行。
[ ]中的常量值用来指定数组的大小。
例如
int arr[20];
char ch[40];
double score[10];
数组的初始化分为完全初始化和不完全初始化
int arr1[5]={1,2,3,4,5};这种为完全初始化
int arr2[5]={1};这种为不完全初始化(没有初始化的元素默认为0)
3。一维数组的使用
int arr[10]={1,2,3,4,5,6,7,8,9,10};
数组元素的下标从0开始依次递增,1,2,3,4....
如果想访问第7个元素,输入arr[7]即可,它的下标为6。
4.一维数组在内存中的存储
#include<stdio.h>
int main()
{
int i;
int arr[10]={1,2,3,4,5,6,7,8,9,10};
for(i=0;i<=10;i++)
printf("%p\n",&arr[i]);
}
打印出来会发现数组在内存中是连续存放的,地址由低到高,相邻元素之间差4个字节。
5.sizeof计算数组元素个数
#include<stdio.h>
int main()
{
int arr[10]={0};
printf("%zd",sizeof(arr));
}
sizeof计算单位是字节,所以上述代码结果为40。
注:sizeof打印时占位符为zd或zu。
#include<stdio.h>
int main()
{
int arr[10]={0};
int sz=sizeof(arr)/sizeof(arr[0]);
printf("%d\n",sz);
}
一个元素四个字节,用总字节数除以一个元素所占字节就是元素的个数。
6.二维数组的创建
int arr[a][b];
a表示行数,b表示列数,int是数组中元素的类型,arr是数组名。
7.二维数组的初始化
不完全初始化:
int arr1[3][5]=[1,2];没有初始化的元素默认为0。
完全初始化
int arr2[3][5]={1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};
按照行初始化
int arr3[3][5]={{1,2},{2,3},{3,4}};
注意的是,初始化可以省略行,但不能省略列。
int arr4[][5]={1,2,3};
int arr5[][5]={1,2,3,4,5,6,7};
上面两种都是对的,但是例如arr6[][]={1,2,3}是错误的。
8.二维数组的使用
C语言规定,二维数组的行是从0开始的,列也是从0开始的。
#include<stdio.h>
int main()
{
int arr[3][5]={1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};
printf("%d\n",arr[2][4]);
}
此时会打印数字7.
二维数组的输入和输出
#include<stdio.h>
int main()
{
int arr[3][5]=[1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
scanf("%d",&arr[i][j]);
}
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
printf("%d ",arr[i][j]);
}
}
9.二维数组在内存中的存储
#include<stdio.h>
int main()
{
int arr[3][5]={0};
int i,j;
for(I=0;i<3;i++)
{
for(j=0;j<5;j++)
printf("%d\n",&arr[i][j]);
}
}
打印出来可以发现每一行个=的每个元素都是相邻的,地址之间差4个字节,跨行位置处的两个元素也差4个字节,所以二维数组在内存中依然是连续存放的。
10.数组练习
多个字符从两端向中间汇聚
#include<stdio.h>
#include<string.h>
int main()
{
char ch1[]="welcome to bit";
char ch2[]="##############";
int left=0;
int right=strlen(ch1)-1;
printf("%s\n",ch2);
while(left<=right)
{
ch2[left]=ch1[left];
ch2[right]=ch1[right];
left++;
right++;
printf("%s\n",ch2);
}
}
二分查找
#include<stdio.h>
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int left=0;
int right=sizeof(arr)/sizeof(arr[0])-1;
int mid;
int flag=0;
int i=7;
while(left<=right)
{
mid=(left+right)/2;
if(arr[mid]>i)
right=mid-1;
else if(arr[mid]<i)
left=mid+1;
else
flag=1;
break;
}
if(flag==1)
printf("找到了\n");
else
printf("找不到了\n");
}
以上是C语言中数组的相关知识和应用。