目录
前言
记录C++中的数组、指针和引用。
一、数组
数组是有固定数目元素组成的数据结构,是一组具有相同数据类型的数据的有序集合。
1.一维数组
1.定义
定义数组格式为:
数据类型 数组名 [数组长度];
eg:
int a[100];
数组中的元素在内存中是连续排列的。
数组元素的下标是从0开始到数组长度减1,例如在上面的例子中,a的下标是0~99.
定义数组的时候要指明数组的长度。
数组的大小必须是产量,不能还有变量。
2.初始化
数组初始化是给数组元素赋初值。数组的初始化是在编译阶段进行的,所以相比运行时初始化,提高了效率。数组的初始化有以下几种方法:
1.定义数组的时候对数组元素初始化:
int a[10] = {0,1,2,3,4,5,6,7,8,9,10};
2.只给一部分元素初始化
int a[10] ={1,2,3};
3.一个数组中的全部元素赋值为0
int a[10]=[0];
或者
int a[10] = {0,0,0,0,0,0,0,0,0,0};
4.对全部数组元素赋初值,可以不指定数组长度。
int a[] = {1,2,3,4,5};
3.访问数组元素
访问数组元素的格式为:
数组名[数组下标];
eg.
a[1]=10;
2.二维数组
二维数组是特殊的多维数组。
1.定义
二维数组定义格式如下:
数据类型 数组名[常量表达式1][常量表达式2];
eg.我们定义一个3行4列的数组:
int a[3][4];
数组在内存中的存放方式是按行连续存放的,每一行的结尾和下一行的第一个元素是紧挨着存放的。
2.初始化
二维数组初始化格式如下:
数据类型 数组名[常量表达式1][常量表达式2] = {初始化数据};
二维数组初始化有4种方式:
1.按行给二维数组赋值
int a[3][4] = {{1,2,3,4},{1,2,3,4},{1,2,3,4},};
2.把所有数据写在大括号赋值
int a[3][4] = {1,2,3,4,1,2,3,4,1,2,3,4};
3.可以对数组中的福分元素赋值
int a[3][4]={{1},{5},{9}};
4.只指定列数,不指定行数
int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
3.访问二维数组元素
访问二维数组表达式格式如下:
数组名[常量表达式1][常量表达式2];
3.多维数组
1.定义
多维数组声明格式如下:
数据类型 数组名[表达式1][表达式2][表达式3][表达式4]......[表达式n];
2.访问
访问多维数组语法如下:
数组名[表达式1][表达式2][表达式3][表达式4]......[表达式n];
4.字符数组
字符数组是用来存放字符的数组。
1.string类型与字符数组
1.string类型
使用string需要导入头文件
#include <string>
我们可以使用以下几种方式给字符串赋值:
1.直接赋值
eg.
string str2 = "Hello World!";
2.先定义后赋值
eg.
string str;
str = "Hello World!";
3.使用字符串给字符串赋值
eg.
string str = "Hello World";
string str2 = str;
字符串不需要指定长度,长度随着字符串长度而改变。除了赋值,可以对字符串变量中的某一字符操作。
2.字符数组
1.定义
字符串定义格式如下:
char 数组名[数组长度];eg.char charArray[10];
字符数组要注意以下几点:
1.给字符数组的各个元素赋值的时候,要在最后加一个'\0',否则不能判断字符串的结束
2.给字符数组指定一个字符串初值,这一点是字符数组特有的
2.常用字符串函数
1.strcpy函数
strcpy函数的原型是:
strcpy(字符数组1,字符数组2);
作用:把字符数组2复制到字符数组1,并且返回字符数组1的首地址.
2.strcat函数
strcat函数的原型是:
strcat(字符数组1,字符数组2);
作用:把字符数组2连接到字符数组1的字符串尾部,结果存放在字符数组1中,并且返回字符数组1的首地址.
3.strcmp函数
strcmp函数的原型是:
strcmp(字符数组1,字符数组2);
作用:把字符数组和字符数组1,从左到右逐个字符比较,知道出现不同的字符或者遇到'\0'为止。
4.strlen函数
strlen函数的原型是:
strlen(字符数串);
作用:返回字符串的长度。
5.strstr函数
strstr函数的原型是:
strstr(字符数组1,字符数组2);
作用:返回字符串相同的子串。
二、指针
1.指针和地址
1.指针定义
指针就是变量的地址。
指针变量就是存放地址的变量。
声明格式如下:
数据类型 * 变量名;
给指针赋值有两种方法:
1.定义的时候初始化
eg.
int i;
int *i_pointer = &i;
2.非定义的时候赋值
eg.
int i;
int * i_pointer;
i_pointer = &i;
2.指针运算
* 取值运算符
& 取地址运算符
2.指针和数组
数组的名字代表数组第一个元素的指针,即数组第一个元素的首地址,也就是数组的首地址。
eg.
int a[10];
int * p;
数组名可以作为参数进行传递。
三、引用
1.引用的概念
引用是一种新的变量类型,它的作用是为一个变量起别名。
格式如下:
类型说明 & 引用名 = 目标量;
eg.
int i = 2;//定义i是整型变量
int &j = i;//声明j是i的引用
2.用引用传递函数参数
引用的一个重要用途就是做为函数的参数。
四、动态内存分配
C++中的动态内存分配是通过new和delete实现的。
1.使用new获取动态内存空间
格式如下:
指针变量 = new 类型;
eg.
int * a;
a = new int(10);
该代码的含义是分配一个int型变量给指针变量a,然后对其赋初值10。
我们还以使用new对数组进行动态分配,格式如下:
指针变量 = new 类型[元素个数];
eg.
int * a;
a = new int[10];
2.使用delete删除动态内存空间
使用new声明的内存空间使用完之后,必须显式的使用delete删除。
eg.
int * a;
a= new int;
...
delete a;