c语言(4)数组,一维数组,二维数组,数组的使用,内存中的存储,数组的使用,sizeof计算数组元素个数

1、数组的概念

int arr[3]={1,2,3};

如图上数组是一堆同类型数的集合
(1)组成数组的元素必须是同一类型
(2)数组必须是由二个以上的元素组成的

2、一维数组的创建和初始化

如上,数组是由

(1)数组的创建:类型(例如int),名称(例如arr),常量(例如【】)
(2)数组的初始化:
int arr[3]={1,2,3};//完全初始化
int arr2[3]={1};//不完全初始化
int arr3[3]={1,2,3,4,5};//错误初始化

由此可见初始化的意思就是自定义数组,未初始化的元素系统默认元素为0

3、一维数组的使用

(1)数组下标:

a、元素的下标是从零开始的
比如数组为:
。。int arr[4]={1,2,3,4,};
元素下标则为 0 1 2 3
b、元素用下标表示则为
int arr[3]=4;

(2)数组打印:

明确了数组的的表示方法以及数组内元素的表示方法那如何输出数组呢?
明确思路通过下角标的循环来进行数组的打印

#include<stdio.h>
int main()
{
	char arr[5] = { 1,2,3,4,5 };
	int a = 0;//给数组下标设一个代数
	for (a=0; a <5; a++)//注意所设值是下角标的值取值范围别弄错为a<=5
	{
		printf("%d", arr[a]);//这里也注意是arr[a]
	}
	return 0;
}
(3)数组输出:

输出和打印差不多,看懂了输入在看看输出
输入时还有一个逻辑是:先通过第一个给下标所在的数赋值,再通过第二个循环把其值赋给数组

#include<stdio.h>
int main()
{
	char arr[5] = { 1,2,3,4,5 };
	int a = 0;
	for(a=0;a<5;a++)
	{
	scanf("%d",&arr[a]);//和输出很像不同的是多了输入数组这一段
	}
	for (a=0; a <5; a++)
	{
		printf("%d", arr[a]);
	}
	return 0;
}

4、一维数组在内存中的存储

#include<stdio.h>
int main()
{
	char arr[5] = { 1,2,3,4,5 };
	int a = 0;
	for (a=0; a <5; a++)/
	{
		printf("arr[%d]地址是%p",a, &arr[a]);//这行是唯一和输出不同的地方
	}
	return 0;
}

总结:数组在内存中是连续存放的

5、sizeof计算数组元素个数

(1)size of的作用:

之前提到过sizeof是用来求内存大小的,又根据提到过的内存内元素都相同可得,如果当数组内元素较多时,可以依靠内存的大小来求得数组个数

(2)比如:

sizeof (arr[])/sizeof(arr[0])
便是用数组的大小与单个元素的大小求得元素个数

#include<stdio.h>
int main()
{
	char arr[5] = { 1,2,3,4,5 };
	int a = 0;
	int sz = 0;
	sz = sizeof(arr) / sizeof(arr[0]);//重点在这
	printf("%d\n", sz);
	for (a=0; a <sz; a++)
	{
		printf("%d", arr[a]);
	}
	return 0;
}

6、二维数组的创建

(1)二维数组组成:

数组分为一维数组和多维数组,而多维数组中最常见的就是二维数组。
一维数组是由一个数组构成,则二维数组则是由两个数组组成,多维数组以此类推。

(1)二维数组的表达:int arr[3][4]

[3]表示有三个一维数组
[4]表示一个数组里有四个元素

7、二维数组的初始化

int arr[3][4]={1,2,3,4, 4,5,6,7, 7,8,9,0];//完全初始化
int arr[3][4]={1,2,3};//不完全初始化
int arr[3][4]={{1,2},{2,3,4},{1}};//按行初始化,每个大括号代表每行的内容,不足的用零补充

注:行可以不表示,列必须表示
比如int arr[][5]={1,2,3,4};

元素个数满足一行后补充进下一行

8、二维数组的使用

(1)数组下标:

同样的元素下标都是从零开始,但是如果将一维数组比作线,那么二维数组就是面,所以可以将二维数组的下标通过类比平面直角坐标系,有横纵两条轴
最终表达式则为
int arr[2][4]={1,2,3,4, 5,6,7,8};
int arr[1][2]=2 ;

(2)数组打印:

和一维数组的输入方式也非常像依旧是利用坐标循环

#include<stdio.h>
int main()
{
	int arr[2][3] = { 1,2,3,4,5,6 };
	int a = 0;//先建立了行的遍历
	int sz = sizeof(arr)/sizeof(arr[0]);
	for(a = 0; a < 2; a++)
	{
		int b = 0;//又建立了列的遍历
		for (b = 0; b < 3; b++)
			printf("%d", arr[a][b]);
	}
	return 0;
}
(3)数组输入输出:

都很像掌握循环的原理后就都能很好的理解

#include<stdio.h>
int main()
{
	int arr[2][3] = { 1,2,3,4,5,6 };
	int a = 0;
	int b = 0;
	int sz = sizeof(arr) / sizeof(arr[0][0]);
	for(a = 0; a < 2; a++)
	{
		for (b = 0; b < 3; b++)
		{
			scanf("%d", &arr[a][b]);
		}
	}
	for(a = 0; a < 2; a++)
	{
		for (b = 0; b < 3; b++)
		{
			printf("%d", arr[a][b]);
		}
	}printf("\n");
	return 0;
}

9、二维数组在内存中的存储

#include<stdio.h>
int main()
{
	int arr[2][3] = { 1,2,3,4,5,6 };
	int a = 0;
	int b = 0;
	
	for (a = 0; a < 2; a++)
	{
		for (b = 0; b < 3; b++)
		{

			printf("arr[%d][%d]的内存地址是%p\n", a, b, &arr[a][b]);
		}
	}
	return 0;
}

根据打印结果得出总结同上:多维数组元素内存也是连续的

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值