目录
数组
概念:
数组是存储数据的结构,由许多数组合而成,而这些数的类型必须相同,而且在内存中必须是连续存储(地址连续)的。
定义:
类型 数组名 [ 数组大小(常量) ]
一维数组
1.一维数组的创建:
int a[4];//int是整型类型,a是数组名,4是数组大小
存储数据的结构如图: 数字称为数组的下标,从 0 开始,用来确认数组元素。
2.初始化:
int arr1[5] = {1,2,3,4,5};//完全初始化
//结果 arr1[0]=1 arr1[1]=2 arr1[2]=3 arr1[3]=4 arr1[4]=5
int arr2[6] = {1,2,3};//不完全初始化 不初始化值默认为0
//结果 arr2[0]=1 arr2[1]=2 arr2[2]=3 arr2[3]=0 arr2[4]=0 arr2[5]=0
int arr3[] = {1,2,3,4};//可以不指定数组大小
//结果 arr3[0]=1 arr3[1]=2 arr3[2]=3 arr3[3]=4
char arr4[] = {'a','b','c'}//字符
//结果 arr4[0]=a arr4[1]=b arr4[2]=c
完整代码:
#include <stdio.h>
int main()
{
int i;
int arr1[5] = {1,2,3,4,5};
int arr2[6] = {1,2,3};
int arr3[] = {1,2,3,4};
char arr4[] = {'a','b','c'};
for(i=0;i<5;i++){//利用循环输出数组元素
printf("arr1[%d]=%d ",i,arr1[i]);
}
printf("\n");
for(i=0;i<6;i++){
printf("arr2[%d]=%d ",i,arr2[i]);
}
printf("\n");
for(i=0;i<sizeof(arr3)/sizeof(arr3[0]);i++){//计算数组的大小 sizeof关键字
printf("arr3[%d]=%d ",i,arr3[i]);
}
printf("\n");
for(i=0;i<sizeof(arr4)/sizeof(arr4[0]);i++){
printf("arr4[%d]=%c ",i,arr4[i]);
}
return 0;
}
3.存储地址:
#include <stdio.h>
int main()
{
int i;
int arr1[4] = {1,2,3,4};
for(i=0;i<4;i++){
printf("arr1[%d]=%d ",i,arr1[i]);
}
printf("\n");
for(i=0;i<5;i++){
printf("arr1[%d]地址%p\n",i,&arr1[i]);
}
return 0;
}
运行结果: 地址连续
4.实例:排序法 大到小
#include<stdio.h>
int main()
{
int data[] = {56,13,7,100,35,18,14,55};
int len = sizeof(data)/sizeof(data[0]);
int i,j;
int tmp;
for(i=0;i<len-1;i++){//取第一个数56
for(j=1+i;j<len;j++){//56与其他数不断对比
if(data[i]<data[j]){//有大于56的数就互换,每轮得到一个最大值
tmp = data[j];
data[j] = data[i];
data[i] = tmp;
}
}
}
printf("大到小:");
for(i=0;i<len;i++){
printf("%d ",data[i]);
}
}
运行结果:
二维数组
1.二维数组的创建:
int arr[i][j];//i是行数,j是列数
存储数据的结构如图:第一个数是行下标,第二个数是列下标。
2.初始化:
//不用花括号时根据行、列大小自动补齐,不够时0补齐,列必须指定大小
int arr1[3][2] = {1,3,4,7};
int arr1[][2] = {1,3,4,7};
//花括号代表一个一维数组的初始化行、列元素不够时0补齐,列必须指定大小
int arr1[3][2] = {{1,3},{4,7}};
int arr1[][2] = {{1,3},{4,7}};
代码:
#include <stdio.h>
int main()
{
int i,j;
int arr1[3][2] = {1,3,4,7};
for(i=0;i<3;i++){
for(j=0;j<2;j++){
printf("arr1[%d][%d]=%d ",i,j,arr1[i][j]);
}
printf("\n");
}
return 0;
}
运行结果:
其他初始化可以参考代码进行修改运行查看结果
3.存储地址:
#include <stdio.h>
int main()
{
int i,j;
int arr1[3][2] = {1,3,4,7};
for(i=0;i<3;i++){
for(j=0;j<2;j++){
printf("arr1[%d][%d]=%d 地址%p ",i,j,arr1[i][j],&arr1[i][j]);
}
printf("\n");
}
return 0;
}
运行结果: 与一维数组一样地址连续
4.实例:寻找矩阵最大值位置
#include<stdio.h>
int main()
{
int i,j;
int h,l;
int arry[3][4] = {{6,8,5,100},{9,54,6,7800},{15,51,674,445}};
int max=arry[0][0];//先假设一个最大值
for(i=0;i<3;i++){
for(j=0;j<4;j++){
printf("%d ",arry[i][j]);//输出矩阵
if(max<arry[i][j]){//与其他数比较,大的数就赋值给max
max=arry[i][j];
h=i;
l=j;
}
}
printf("\n");
}
printf("\n");
printf("第%d行 第%d列 有最大值%d",h+1,l+1,max);
return 0;
}
运行结果: