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


文章目录

  • 一、一维数组
    • 1.一维数组的声明
    • 2.一维数组的引用
    • 3.一维数组的初始化
  • 二、二维数组
    • 1.二维数组的声明
    • 2.二维数组的引用
    • 3.二维数组的初始化
  • 三、字符数组
    • 1.字符数组的声明
    • 2.字符数组的赋值方式
    • 3.字符串处理函数
  • 总结

一、一维数组

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);//输入str1cout<<"请输入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);//输入str1cout<<"请输入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);//输入str1cout<<"请输入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);//输入str1cout<<"请输入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);//输入str1cout<<strlen(str1)<<endl;
}


总结

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


作者:电气-余登武

C++学习笔记6[数组]相关推荐

  1. JavaScript学习笔记之数组(二)

    JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...

  2. Java中大数据数组,Java基础学习笔记之数组详解

    摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...

  3. Python学习笔记——Numpy数组的移动滑窗,使用as_strided实现

    Python学习笔记--Numpy数组的移动滑窗,使用as_strided实现 `Numpy`中移动滑窗的实现 为何需要移动滑窗 `Numpy`中的移动滑窗 移动滑窗的`as_strided`实现方法 ...

  4. awk学习笔记(10) - 数组

    awk中的数组 awk中的数组跟php中的很像,使用前都不需要声明,都可以用字符串做下标. 我们创建一个reg.dat文件来记录用户选修的课程: Mary O.S. Arch. Discrete St ...

  5. JavaScript学习笔记:数组reduce()和reduceRight()方法

    很多时候需要累加数组项的得到一个值(比如说求和).如果你碰到一个类似的问题,你想到的方法是什么呢?会不会和我一样,想到的就是使用for或while循环,对数组进行迭代,依次将他们的值加起来.比如: v ...

  6. c++ map是有序还是无序的_go 学习笔记之数组还是切片都没什么不一样

    上篇文章中详细介绍了 Go 的基础语言,指出了 Go 和其他主流的编程语言的差异性,比较侧重于语法细节,相信只要稍加记忆就能轻松从已有的编程语言切换到 Go 语言的编程习惯中,尽管这种切换可能并不是特 ...

  7. [学习笔记]后缀数组

    参考: 后缀数组 最详细讲解 上面一篇是转载这一篇的: 后缀数组 学习笔记 一. 后缀:suff(i),后缀要排序 sa[i],排名为i的后缀开始位置 rk[i],i开始位置的后缀的排名. rk[sa ...

  8. 陈广 C#学习笔记(数组2-3)

    C#视频(陈广版)学习笔记2-3 本2.3节讲解C#中的数组 using System; class Test {  static void Main()    //声明一个Main()入口函数  { ...

  9. 建立数组并写入数据_VBA学习笔记19:数组1

    学习资源:<Excel VBA从入门到进阶>第20集 by兰色幻想 一.什么是VBA数组? VBA数组就是储存一组数据的数据空间,数据类型可以数字,可以是文本,可以是对象,也可以是VBA数 ...

最新文章

  1. idea导入gradle
  2. 如何用原生js替换字符串中的某个字符(或字符串)为指定的字符串?
  3. Oracle PL/SQL小练习
  4. java数组有跨类建立对象_Java性能优化的45个细节(珍藏版)
  5. linux 漏洞 poc,CVE-2017-11176: 一步一步linux内核漏洞利用 (二)(PoC)
  6. gtb分类器参数调节_集成学习
  7. myeclipse jdk tomcat mysql配置_JDK,TOMCAT,myeclipse,mysql安装以及配置
  8. python爬取网易云音乐数据
  9. 超实用的工具、素材、学习网站分享
  10. windowsGHO镜像系统winXPwin7win8win10正版下载
  11. 优矿API实现一个双均线策略
  12. 前度字符串转数组_关于前度书籍的阿里云论坛用户知识和技术交流
  13. 【Robo3T】为mongodb数据库中的表创建索引的步骤
  14. OpenCV快速入门五:色彩空间转换
  15. 2019计算机考研各科目时间安排,2019考研时间安排
  16. Vue实战篇三十三:实现新闻的浏览历史
  17. C++程序设计教程(钱能)第四章 学习笔记
  18. Python——爬取某瓣电影评论信息并生成词云图
  19. 资产实物综合管理系统应用方案介绍
  20. 20年前iPod改变了世界,20年后它变成了怀旧机器

热门文章

  1. wifi卡慢延迟高_健康生活好助手:华为智能体脂秤 WiFi 版 体验评测
  2. stream流【java8 二】
  3. web.py——运行错误【AttributeError: ‘StaticApp‘ object has no attribute ‘directory‘】
  4. Postman——导出测试接口集合的Collection文件
  5. ubuntu使用redis和宝塔面板
  6. 如何联机调试和发布程序(99$)
  7. Android NDK学习笔记2:数组
  8. bugku—— 代码审计 做题记录
  9. JavaWeb学习之路——SSM框架之SpringMVC(七)
  10. 常见分布式理论(CAP、BASE)和一致性协议(Gosssip协议、Raft一致性算法)