C++之数组

3 数组

3.1 一维数组

概述:数组就是一个集合,里面存放了相同类型的数据元素。
特点:

  • 存放在一块连续的内存空间
  • 数组中每个元素都是相同的数据类型
  • 通过下标访问数组元素(数组的下标是从0开始的

3.1.1 一维数组定义方式

主要有三种:

  1. 数据类型 数组名[数组长度];
  2. 数据类型 数组名[数组长度]={值1,值2,…};
  3. 数据类型 数组名[]={值1,值2,…};

例1(数组的定义及遍历)
定义1

//定义1
int arr1[5];
//给数组赋值
for (int i = 0; i < sizeof(arr1) / sizeof(int); i++) {
	arr1[i] = i;
}
//输出数组
for (int i = 0; i < sizeof(arr1) / sizeof(int); i++) {
	cout << arr1[i] << endl;
}

sizeof返回的是字节数,这里数组的长度为数组的总字节数/单个元素类型的字节数

运行结果:
在这里插入图片描述

定义2

//定义2

int arr2[5] = { 1,2,3,4,5 };
//输出数组
for (int i = 0; i < sizeof(arr2) / sizeof(int); i++) {
	cout << arr2[i] << endl;
}
cout << "-------------------------------" << endl;

在初始化数据的时候,如果没有全部填完,会用0填补剩余数据

运行结果:
在这里插入图片描述

定义3

//定义3
int arr3[] = { 10,20,30,40,50 };
//输出
for (int i = 0; i < sizeof(arr3) / sizeof(int); i++) {
	cout << arr3[i] << endl;
}

必须要有初始长度

运行结果:
在这里插入图片描述

3.1.2 一维数组数组名

作用:

  • 可以统计整个数组在内存中的长度
  • 可以获取数组在内存中的首地址

在这里插入图片描述
例2(数组名用途)

  • 通过数组名统计整个数组占用内存大小
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
cout << "整个数组占用内存空间为:" << sizeof(arr) << endl;
cout << "每个元素占用内存空间为:" << sizeof(int) << endl;
cout << "数组中元素个数为:" << sizeof(arr)/ sizeof(int) << endl;

运行结果:
在这里插入图片描述

  • 可以通过数组名查看数组首地址
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
cout << "数组首地址为:" << arr << endl;
//&为取址字符
cout << "数组第一个元素地址为:" << &arr[0] << endl;

运行结果:
在这里插入图片描述

数组名是常量,不可以进行赋值操作

例3(数组元素逆置)

int a[] = { 1,2,3,4,5,6,7};
cout << "数组逆置前为:" << endl;
for (int i = 0; i < sizeof(a) / sizeof(int); i++) {
	cout << a[i] << " ";
}
cout << "\n数组逆置前后:" << endl;
int temp = 0;
int end = sizeof(a) / sizeof(int) - 1;
int length = sizeof(a) / sizeof(int);
for (int i = 0; i < length/2; i++) {
	temp = a[i];
	a[i] = a[end];
	a[end] = temp;
	end--;
}
//加强版for循环
for (int t : a) {
	cout << t << " ";
}

在这里插入图片描述

注意点:用到变量temp来替换元素;加强版for循环要掌握。

3.2 二维数组

3.2.1 二维数组定义方式

主要有四种:

  1. 数据类型 数组名[行数][列数];
  2. 数据类型 数组名[行数][列数]={ {数据1,数据2} , {数据3,数据4} };
  3. 数据类型 数组名[行数][列数]={ 数据1,数据2 , 数据3,数据4 };
  4. 数据类型 数组名[ ][列数]={ 数据1,数据2 , 数据3,数据4 };

建议:以上四种定义方式,利用第二种更加直观,提高代码的可读性

定义1

//1)数据类型 数组名[行数[列数];
//分配内存空间
int b1[2][3];
//赋值
b1[0][0] = 1;
b1[0][1] = 2;
b1[0][2] = 3;
b1[1][0] = 4;
b1[1][1] = 5;
b1[1][2] = 6;
//输出
for (int i = 0; i < 2; i++) {
	for (int j = 0; j < 3; j++) {
		cout << b1[i][j] << endl;
	}
}

运行结果:
在这里插入图片描述
定义2

//2)数据类型 数组名[行数[列数]={ {数据1,数据2} , {数据3,数据4} };
int b2[2][3] = {
		{1,2,3},
	    {4,5,6}
};
for (int i = 0; i < 2; i++) {
	for (int j = 0; j < 3; j++) {
		cout << b2[i][j] << endl;
	}
}

运行结果:
在这里插入图片描述
定义3

//3)数据类型 数组名[行数[列数]={ 数据1,数据2 , 数据3,数据4 };
int b3[2][3] = { 1,2,3,4,5,6 };
for (int i = 0; i < 2; i++) {
	for (int j = 0; j < 3; j++) {
		cout << b3[i][j] << endl;
	}
}

运行结果:
在这里插入图片描述
定义4

//4)数据类型 数组名[  ][列数]={ 数据1,数据2 , 数据3,数据4 };
int b4[][3] = { 1,2,3,4,5,6 };
for (int i = 0; i < 2; i++) {
	for (int j = 0; j < 3; j++) {
		cout << b4[i][j] << endl;
	}
}

运行结果:
在这里插入图片描述

3.2.2 二维数组数组名

作用:

  • 查看二维数组所占内存空间
  • 获取二维数组首地址

例4(二维数组名用途)

  • 查看二维数组所占内存空间
int b2[2][3] = {
	{1,2,3},
    {4,5,6}
};
cout << "二维数组占用空间为:" << sizeof(b2) << endl;
cout << "二维数组第一行占用内存为:" << sizeof(b2[0]) << endl;
cout << "二维数组第一个元素占用内存为:" << sizeof(b2[0][0]) << endl;
cout << "二维数组行数为:" << sizeof(b2) / sizeof(b2[0]) << endl;
cout << "二维数组列数为:" << sizeof(b2[0]) / sizeof(b2[0][0]) << endl;

运行结果:
在这里插入图片描述

  • 获取二维数组首地址
int b2[2][3] = {
	{1,2,3},
    {4,5,6}
};
cout << "二维数组首地址为:" << b2<<endl;
cout << "二维数组第一行首地址为:" << b2[0] << endl;
cout << "二维数组第二行首地址为:" << b2[1] << endl;
cout << "二维数组第一个元素首地址为:" << &b2[0][0] << endl;

运行结果:
在这里插入图片描述

为什么二维数组的首地址与第一行首地址一样呢,又或者是第一个元素首地址?
解答:
二维数组的地址就是它首元即第一个一维数组a[0]的地址,而一维数组a[0]的地址又是它的首元a[0][0]的地址。所以三者是相同的。

例5(数组综合应用)

题目描述:有三名同学(张三、李四、王五),在一次考试中的成绩分别如下表,请分别输出三名同学的总成绩。

姓名语文数学英语
张三1009895
李四907568
王五667898

代码实现:

//建立二维数组(初始化)
int scores[3][3];
string names[3] = { "张三","李四","王五" };
//赋三科分数
int a = 0;
int b = 0;
int c = 0;
//计数(下标)
int n = 0;
int m = 0;
//总分
int sum[3];
do {
	cout << "请分别输入"<<names[n]<<"的三科成绩:" << endl;
	cin >> a >> b >> c;
	sum[n] = a + b + c;
	scores[n][m++] = a;
	scores[n][m++] = b;
	scores[n][m] = c;
	m = 0;//置为0
	n++;
	cout<<endl;
} while (n < 3);
//输出
for (int i = 0; i < 3; i++) {
	cout << names[i]<< "的总成绩为" << sum[i] << endl;
}

运行结果:
在这里插入图片描述

下期讲一讲数组排序问题,这里的总成绩还可以进一步排序。

  • 7
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xw_lover

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

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

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

打赏作者

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

抵扣说明:

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

余额充值