IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++学习笔记6[数组] -> 正文阅读

[C++知识库]C++学习笔记6[数组]

C++学习目录链接:
C++学习笔记目录链接(持续更新中)



一、一维数组

1.一维数组的声明

????在程序设计中,将同一数据类型的数据按一定形 式有序地组织起来,这些有序数据的集合就称为数组。一个数组有一个统一的数组名, 可以通过数组名和下标来唯一确定 数组中的元素。一维数组的声明形式如下:

数据类型 数组名 [常量表达式]

int a[10];//声明一个整形数组,包含10个元素
char name[128];//声明一个字符数组,包含128个字符
float price[20];//声明一个浮点型数组,包含20个元素

????使用数组的说明:

  • (1)数组名的命名规则和变量名相同。
  • (2)数组名后面的括号是方括号,方括号内是常量表达式。
  • (3)常量表达式表示元素的个数,即数组的长度。
  • (4)定义数组的常量表达式不能是变量,因为数组的大小不能动态定义。例如:int a[i];//不合法

2.一维数组的引用

????一维数组引用的-般形式如下:
????数组名[下标]

????例如:
int a[10];//声明一个整形数组,包含10个元素
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],是对数组a中10个元素的引用。

????一维 数组引用的说明:
????(1)数组元素的下标起始值为0而不是1。
????(2) a[10]是不存在的数组元素,引用a[10]非法。

3.一维数组的初始化

????数组元素初始化的方式有两种,- 种是对单个元素逐一赋值,另一种是使用聚合方式赋值。
(1)单一数组元素赋值
a[0]=0就是对单一数组元素赋值,也可以通过变量控制下标的方式进行赋值。例如:

#include <iostream>

using namespace std;

void main()
{
char a[3];//声明一个字符数组,包含3个元素
a[0]='a';
a[1]='b';
a[2]='c';
int i=0;
cout<<a[i]<<endl;//打印a[0]
}

(2)聚合方式赋值
数组不仅可以逐一对数组元素赋值,还可以通过大括号进行多个元素的赋值。例如:

char a[3]={'a','b','v'};//声明一个字符数组,包含3个元素

char a[]={'a','b','v'};//声明一个字符数组,编译器能识别元素个数

char a[3]={'a','b'};//声明一个字符数组,包含3个元素,最后一个元素赋值为空,如果是整型数组,则赋值为0
#include <iostream>
using namespace std;
void main()
{
char a[3]={'a','b','v'};//声明一个字符数组,包含3个元素

int i=0;
cout<<a[i]<<endl;//打印a[0]
}

二、二维数组

1.二维数组的声明

????二维数组声明的一般形式为:
数据类型数组名[常量表达式1][常量表达式2]
例如:
int a[3]4];//声明具有3行4列元素的整型数组
float myArray[4][5]; /I声明具有 4行5列元素的浮点型数组

????一维 数组描述的是-一个线性序列,二维数组描述的则是一个矩阵。常量表达式1代表行的数量,常量表达式2代表列的数量。二维数组可以看作是一种特殊的一维数组,如图所示,虛线左侧为3个一维数组的首元素,二维数组是由A[0]、A[1]、A[2]这3个一维数组组成,每个一维数组都包含4个元素。
使用数组的说明:
(1)数组名的命名规则和变量名相同。
(2)二维数组有两个下标,所以要有两个中括号。例如:int a[3,4] //不合法
inta[3:4] //不合法

(3)下标运算符中的整数表达式代表数组每一个维的长度,它们必须是正整数,其乘积确定了整个数组的长度。例如:int a[3][4]其长度就是3X4=12。

(4)定义数组的常量表达式不能是变量,因为数组的大小不能动态定义。例如:
int a[]0]; //不合法

2.二维数组的引用

????二维数组元素的引用形式为:
数组名[下标]下标]
二维数组元素的引用和- -维数组基本相同。例如:
a[2-1[22-1]//合法
a[2,3]a[2-1,2
2-1]//不合法

3.二维数组的初始化

????二维数组元素初始化的方式和一-维 数组相同,也分为单个元素逐一的赋值和使用聚合方式赋值。
例如:

myArray[0][1]=2;//单个元素初始化
int A[2][3]={1,2,3,4,5,6};//使用聚合方式初始化

????二维数组中元素排列的顺序是按行存放,即在内存中先顺序存放第1行的元素,再存放第2行的元素。例如“int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};"的赋值顺序是:
先给第1行元素赋值: a[]0)->@[]1]->a[]2]->a[0][3]。
再给第2行元素赋值: a[1][0]->a[1][1]->a[1][2]->a[1][3]。
最后给第3行元素赋值: a[2][0]->a[2][1]~>a[2][2]->a[2][3]。

????使用聚合方式赋值,还可以按行进行赋值,例如:

int A[2][3]={{1,2,3},{4,5,6}};

????二维数组可以只对前几个元素赋值。例如:

int A[2][3]={1,2,3};//相当于给第一行赋值,其他元素为0

????数组元素是左值,可以出现在表达式中,也可以对数组元素进行计算。例如:

b[1][2]=A[1][2]/3;
/* 将数组行列互换*/
#include <iostream>
#include <iomanip>//输出流控制
using namespace std;

int fun(int array[3][3])
{int i,j,t;
   for(i=0;i<3;i++)
     for(j=0;j<i;j++)
	 {t=array[i][j];
	 array[i][j]=array[j][i];
	 array[j][i]=t;}
     return 0;
}
void main()
{

int i,j;
cout<<"转换前"<<endl;
int A[3][3]={{1,2,3},{4,5,6},{7,8,9}};
for(i=0;i<3;i++)
{for(j=0;j<3;j++){cout<<setw(7)<<A[i][j];
}cout<<endl;}

fun(A);
cout<<"转换后"<<endl;
for(i=0;i<3;i++)
{for(j=0;j<3;j++){cout<<setw(7)<<A[i][j];
}cout<<endl;}

}

三、字符数组

????用来存放字符数据的数组是字符数组,字符数组中的一个元素存放-一个字符。字符数组具有数组的共同属性。由于字符串应用广“泛,C和C++专门为它提供了许多方便的用法和函数。

1.字符数组的声明

????char pWord[11];

2.字符数组的赋值方式

????可以对数组元素进行单一赋值

pWord[0]='a';
pWord[1]='b';

????可以对数组元素进聚合赋值

char pWord[11]={'a','b','c','d','e','f','g','h','i','f','j'};

????如果大括号中提供的初值个数大于数组长度,则按语法错误处理。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余元素自动定义为空字符。如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。
聚合方式只能在数组声明时使用。例如:

char pWord[11];
pWord[11]={'a','b','c','d','e','f','g','h','i','f','j'};//错误

????字符数组不能给字符数组赋值

char A[5]={'a','b','c','d','e'};
char b[5];
A=b;//错误
A[0]=b[0];//正确

????字符数组常作字符串使用,作为字符串要有字符串结束符“\0”。。可以使用字符串为字符数组赋值。例如:

char A[]="hello world";
	等于
char A[]="hello world\n";

????字符串结束符“\0”主要告知字符串处理函数字符串已经结束了,不需要再输出了。下面通过实例来看一下使用字符串结束符“\0” 和不使用字符串结束符“\0” 的区别。

/* 未在末尾添加\0*/
#include <iostream>

using namespace std;

void main()
{
	char A[12];
	A[0]='a';
	A[1]='b';
	printf("%s\n",A);
}

/* 在末尾添加\0*/
#include <iostream>

using namespace std;

void main()
{
	char A[12];
	A[0]='a';
	A[1]='b';
	A[2]='\0';
	printf("%s\n",A);
}

3.字符串处理函数

????strcat函数

字符串连接函数strcat的格式如下:
strcat(字符数组1,字符数组2)

????其功能是将字符数组2中的字符串连接到字符数组1中字符串的后面,并删去字符串1后的串结束标志“\0

#include <iostream>
#include<string>//导入字符串包

using namespace std;

void main()
{
	char str1[12],str2[6];
	cout<<"请输入str1字符串"<<endl;
	gets(str1);//输入str1
	cout<<"请输入str2字符串"<<endl;
	gets(str2);
	strcat(str1,str2);//字符串拼接
	puts(str1);//打印
	
}

在使用strcat函数时要注意,字符数组1的长度要足够大,否则不能装下连接后的字符串。

????不使用strcat拼接

#include <iostream>
#include<string>//导入字符串包

using namespace std;

void main()
{
	int i=0,j=0;
	char str1[12],str2[6];
	cout<<"请输入str1字符串"<<endl;
	gets(str1);//输入str1
	cout<<"请输入str2字符串"<<endl;
	gets(str2);
	while(str1[i]!='\0')//遍历str1字符串,直到遇到str1中的结束符
		i++;
	while(str2[j]!='\0')//遍历str2字符串,直到遇到结束符标志为止
		str1[i++]=str2[j++];
	    str1[i]='\0';
	puts(str1);//输出str1
	
}

????strcpy函数

字符串复制函数strepy的格式如下:
其功能是将把字符数组2中的字符串复制到字符数组1中。字符串结束志“\0”也一同复制。

说明
①要求字符数组1应有足够的长度,否则不能全部装入所复制的字符串。
②字符数组1必须写成数组名形式,而字符数组2可以是字符数组名,也可以是一个字符串常量,这时相当于把一个字符串赋予一个字符数组。

#include <iostream>
#include<string>//导入字符串包

using namespace std;

void main()
{
	char str1[12],str2[6];
	cout<<"请输入str1字符串"<<endl;
	gets(str1);//输入str1
	cout<<"请输入str2字符串"<<endl;
	gets(str2);
	strcpy(str1,str2);//字符串复制
	puts(str1);//打印
	
}

说明
strcpy函数实质上是用字符数组2中的字符串覆盖字符数组1中的内容,而strat函数则不存在覆盖等问题,只是单纯地将字符数组2中的字符串连接到字符数组1中的字符串后面。

????strcmp函数
字符串比较函数strcmp的格式如下:
strcmp(字符数组1,字符数组2)
其功能是按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。如果字符串1=字符串2,返回值为0;如果字符串1>字符串2,返回值为- -正数;如果字符串1<字符串2,返回值为一负数。该函数可用于比较两个字符串常量,或比较数组和字符串常量。例如:

#include <iostream>
#include<string>//导入字符串包

using namespace std;

void main()
{
	int i=0
;	char str1[6],str2[6];
	cout<<"请输入str1字符串"<<endl;
	gets(str1);//输入str1
	cout<<"请输入str2字符串"<<endl;
	gets(str2);
	i=strcmp(str1,str2);//字符串比较
	cout<<"i="<<i<<endl;

	
}

????strlen函数

????测字符串长度函数strlen的格式如下:
strlen(字符数组名)
其功能是测字符串的实际长度(不含字符串结束标志“\0”),函数返回值为字符串的实际长度。

#include <iostream>
#include<string>//导入字符串包

using namespace std;

void main()
{
	char str1[6];
	cout<<"请输入str1字符串"<<endl;
	gets(str1);//输入str1
	cout<<strlen(str1)<<endl;	
}

总结

本文讲解了C++中的数组

在这里插入图片描述
作者:电气-余登武

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:09:10  更:2021-08-05 17:09:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/10 2:51:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码