C++中数组的使用

文章目录

  • C++数组
    • 一维数组
      • 声明
      • 初始化
      • 构建动态数组
      • 注意细节
      • 作为函数参数
      • 作为返回值
    • 二维数组
      • 声明静态数组
      • 初始化静态数组
      • 构建动态数组
      • 寻址问题
      • 作为函数参数
      • 作为返回值
    • 三维数组

C++数组

一维数组

声明

typename arrayName[arraySize];

初始化

int a[5]={0};//全部初始化为0
int a[5]={1,2};//将前2个初始化为1,2,其余全为0
int a[5]={0,1,2,3,4};//分别初始化为0,1,2,3,4
int a[]={0,1,2};//意味着数组a的长度是3

int numSize;
int a[numSize];
for(int i=0;i

构建动态数组

//声明
typename* pointerName = new typename[arraySize];
//释放
delete [] pointerName;
//例子
int numSize=10;
int* num=new int[numSize];
for(int i=0;i

注意细节

  • 数组名表示的是数组的基地址,作用相当于指针
  • a[0]代表数组第一个元素
  • (a+1)[0]代表数组第二个元素
  • 下标从0开始编号,编译器不会检查下标是否有效,必须使用有效的下标,否则会发生数组下标溢出
  • sizeof(arrayName) 得到的是数组的字节数

作为函数参数

  • 通过指定不带索引的数组名来传递一个指向数组的指针。
  • 传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址。
//1.形式参数是指针
int myFunction(int* num,int numSize){
    int sum=0;
    for(int i=0;i

作为返回值

  • 动态分配内存、静态数组在函数返回之后都不会销毁,只有当程序结束时被系统回收,或者程序员自己回收
//程序内部为数组动态分配内存
int* myFunction(int num[],int numSize){
    int resultSize=numSize;
    int* result=new int[resultSize];
    for(int i=0;i

二维数组

声明静态数组

  • 二维数组是数组的数组
  • 计算机存储方式是按行优先存储,所以地址计算方式如下:
  • 地址计算:num+i*columnSize+j
//传统定义
typename arrayName[rowSize][columnSize];
//使用vector定义二维数组
vector >swp(rowSize,vector(columnSize));

初始化静态数组

int num[2][2]={0};//全都初始化为0
//两种初始化方式等价
int num[2][2]={1,2,3,4};
int num[2][2]={{1,2},{3,4}};

构建动态数组

  • 分配二维数组在存储上并不连续
	int rowSize=2,columnSize=2;
	//分配内存空间
	int** num=new int*[rowSize];
	for(int i=0;i
  • 动态分配连续型二维数组
//动态分配连续内存
	int rowSize=2,columnSize=2;
	int** num=new int*[rowSize];
	num[0]=new int[rowSize*columnSize];//申请分配内存空间的总大小
	for(int i=1;i

寻址问题

  • 可以直接使用num[i][j]寻址,也可以使用下面的方式寻址
  • 对于int (*num)[columnSize],下面三种寻址方式等价
    • *(*(num+i)+j)
    • *(num+i*2+j)
    • num[i*columnSize+j]
  • 对于int **num
    • 可以转换成一维数组寻址:*((int*)num+i*columnSize+j)

作为函数参数

  • 在函数的参数声明中必须指明数组的列数,数组的行数没有太大关系,可以指定也可以不指定。
  • 因为函数调用时传递的是一个指针,它指向由行向量够成的一维数组。
//指定列不指定行,第二个参数传入行数
void myFunction(int num[][2],int rowSize){
    int sum=0;
    for(int i=0;i
            //*(num+i*2+j)<==>
            //num[i*columnSize+j]
        }
    }    
}
//使用二级指针,不指定行和列,第2\3个参数分别代表行数\列数
void myFunction(int **num,int rowSize,int columnSzie){
    int sum=0;
    for(int i=0;i

作为返回值

	int** Matrix(int row,int column){
		int** num=new int*[row];
		for(int i=0;i>num[i][j];
				}
		}
		return num;
	}

三维数组

你可能感兴趣的:(C++)