c语言—数组详解(一维、二维)

目录

数组

概念:

定义:

一维数组

1.一维数组的创建:

2.初始化:

3.存储地址:

4.实例:排序法 大到小

二维数组

1.二维数组的创建:

2.初始化:

3.存储地址:

4.实例:寻找矩阵最大值位置


数组

        概念:

        数组是存储数据的结构,由许多数组合而成,而这些数的类型必须相同,而且在内存中必须是连续存储(地址连续)的。

        定义:

        类型  数组名  [ 数组大小(常量) ]

一维数组

        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;
}

        运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wlkq~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值