Chapter 5 利用数组处理批量数据

本文详细讲解了数组在编程中的重要性,包括数组的定义、下标使用、好处、不同类型数组(一维和二维)的定义与初始化,以及如何作为函数参数。还介绍了字符数组和字符串处理函数如strcat、strcpy、strcmp和strlen的应用。
摘要由CSDN通过智能技术生成

目的:学习数组

🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹

5.1 为什么需要数组

1.数组的定义:就是用一个统一的名字代表这批数据,而用序号或下标来区分各自的数据,可以理解为“数组是有序数据的集合”

补充:

a:用来表示该数据在数中的序号成为下标,下标只是表示有多少个元素,并且是从0开始的

b:数组中的数据称为数组元素

c:数组是有类型的,所以数组中的每一个元素都必须属于同一个数据类型

d:数组也是要先定义然后才能使用的

2.数组的好处:不需要定义大量的变量,大大减少程序中的变量数量,使程序精炼

注意⚠️:

a:在C语言和C++中,数组是要用方括号来表示下标的,“[ ]”下标引用操作符

b:只能逐个引用数组元素而不能一次引用整个数组的全部元素的值

🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹

5.2 定义和引用一堆数组

1.数组的一般形式:类型名   数组名[ 常量表达式]   

a:常变量表达式:包括常量、长变量和符号常量,不可以是变量

b:常变量表达式的值表示元素的个数,即数组长度

2.数组元素的形式:数组名[下标]

a:下标可以是整型常量或者整型表达式

3.一堆数组的初始化

a:定义:在创建数组的同时给数组的内容一些合理的初始值

b:实现方法:

(1)在定义数组时对全部数组的元素赋予初值,例如:int a[3]={1,3,4}

(2)也可以只赋一部分的值,例如:int a[4]={1,3,4},剩下的那一部分就默认为0

(3)对全部数组赋初值时,可以不指定数组长度,例如:int a[]={1,3,4},并且系统会自动定义为长度5

d:这里补充一下一个可能会用来计算长度的一个小方法

int sz=sizeof(arr)/sizeof(arr[0])

c:数组是连续存放的

🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹

5.3 定义和引用二维数组

可以类比一下一维数组

1.二维数组一般的形式:类型名 数组名[ 常量表达式][常量表达式]

2. 二维数组的元素的一般形式为:数组名[下标][下标]

a:数组元素可以是左值,也可以出现在表达式中,也可以被赋值

b:第一个下标可以表示行,第二个可以表示列,列不可以省略,行可以

3.二维数组的初始化,与一维数组类似

a:按行给二维数组全部元素赋值,例如:int a[1][2]={{1},{2}};

b:可以将所有的数据写在一个花括号内,按照数组排列的顺序对全部元素赋初值,例如:

int a[1][2]={1,2}; ,系统及自动安排

c:可以对部分元素赋初值,没有被赋予初值的就默认为0

int a[2][2]={{1},{2}};

d:如果对全部都赋初值(即提供全部初始数据),则第1维数组长度可以不指定,但第2维数组的长度不能省略,例如:int a[2][2]={1,2,3,4}可以写成int a[][2]={1,2,3,4}

🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹

5.4 用数组做函数参数

1.用数组元素做函数实参:数组元素当然可以作为函数的实参,与用变量做实参一样,将元素的值传送给形参变量

2.用数组名做函数参数:形参和实参都可以,数组名带代表的是首元素地址

补充—数组名做函数参数的说明:

a:若函数实惨为数组名,形参也应为数组名,形参不能声明为普通变量(例如:可以声明为int arr[3],但不可以声明为int arr),且行参与实参的类型应一致

b:数组做参数时,也是单向传递,形参的改变不会影响实参

c:一些合理的写法:

void sort(int arr[10],int n);//个数与实参相同
void sort(int arr[],int n);//不写
void sort(int arr[5],int n);//与实参个数不同

补充—数组一些小变化:

a:数组不同情况所代表的内容不同

int arr[10];
cout<<arr<<endl;//代表的是首元素地址
cout<<&arr[0]<<endl;//代表的是首元素地址
cout<<&arr[2]<<endl;//代表的是下标为2的地址
cout<<&arr<<endl;//代表的是整个数组的地址

b:sizeof与数组

int arr[4];
sizeof(arr);//表示的是整个数组的大小、单位长度

🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹

 5.5 字符数组(用来存放字符数据的数组

1.初始化:有两种方法

a:方法一:直接逐个字符进行初始化,但是不会自动加‘\0’,若要加上‘\0’,那么他也要算其中的一个元素

int a[]={'a','b','\n'};//3个元素
int a[]={'a','b'};//2个元素

b:方法二:使用“   ”初始化数组,这个会自动加‘\0’

c:\0的作用是使程序结束,所以在程序中我们一般是以遇到‘\0’的位置来判断是否结束了,而不是数组的长度来决定的

2.字符数组的赋值与引用

a:只能对字符数组的元素赋值,而不能对整个赋值语句对整个数组赋值

例如:我们已经定义了a和b是具有相同类型和长度的数组,且b数组已经初始化了,我们打算把数组b的赋值给数组a

合理的写法是一个一个元素赋值:a[2]=b[2];

不合理的写法:a=b;

3.输入输出注意:

a:输出的字符不包括结束符'\0'

b:输出字符串时,cout流中用字符数组名;但如果是输出一个字符的话,就用数组元素名

c:如果数组长度大于字符串实际长度,与‘\0’结束

d:如果一个字符数组包含一个以上‘\0’,则遇到第一个‘\0’就输出结束

e:用cin输入要储存的一个字符串或字符时,应小于我们定义的数组长度,可以理解为有多少用多少,别用飚了

4.一些字符串处理函数

a:字符串连接函数strcat:strcat(char[ ],const char [ ])

意义:将第2个字符数组中的字符串连接到前面字符数组的字符串的后面,第2 个字符数组被声明为const以保证数组的内容不会再函数期间调用修改

#include <iostream>
using namespace std;
int main()
{
    char st1[30]="I like eating ";
    char st2[10]="apple";
    cout<<strcat(st1,st2);
    return 0;
}


结果: 

b:字符串复制函数strcpy:strcpy(char [ ],const char [ ])

作用:是将第2个字符数组中的字符串复制到第1个字符数组中去,是将第1个字符数组中的相应字符覆盖

#include <iostream>
using namespace std;
int main()
{
    char st1[30]="I like eating ";
    char st2[10]="apple";
    cout<<strcpy(st1,st2)<<'\n';
    return 0;
}


 结果:

 c:字符串比较函数strcmp:strcmp(const char [ ],const chatr [ ])

作用:比较两个字符串,比较的结果由函数值带回,比较用的是ASCII码

d:字符串长度函数strlen:strlen(const char [ ])

作用:测试字符串长度,不包括‘\0’

5.不仅有字符数组,也有字符串数组,两者的区别为,前者一个空间一个字符,后者为一个空间为一个完整的字符串,字符串数组也没哟包含‘\0’

共同学习,欢迎指正!

  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值