C++一维数组与二维数组

一维数组创建

#include<iostream>
#include<iomanip>
using namespace std;
const int COL = 3;
void display(int *arr,int n){
	for(int i=0;i<n;i++){
		cout<<arr[i]<<"\t";
	}
	cout<<endl;
	
}
// 函数外部,默认以0初始化 
int arr[10]; 
int main() {
	//	一维数组动态创建
	int N = 10;
	//对非动态创建的数组
	//		1.使用int q[10]={0};可以将其用0初始化
	//		2.若使用其他数字会出现不确定的结果 
	//		3.在函数内部使用:int q[10]; 而不初始化,会出现不确定的结果 
	//		4.但是在方法函数外部, 使用int q[10]; 则会默认以0初始化 
	int q[10] = {0}; 
	//输出全是0 
	display(q,N); 
	//输出全是0 
	display(arr,10);
	//动态创建一维数组, 默认用0初始化 
	int *ptr = new int[N];
	 //输出全是0 
	display(ptr,N);
	for(int i=0;i<10;i++){
		//赋初值 
		ptr[i] = i; 
	}
	display(ptr,N);
}
         

一维数组类型的参数传递与输出

#include<iostream>
#include<iomanip>
using namespace std;
//声明函数类型,参数为一维数组 
void display(const int [],int);
int main() {
 int inum = 10;
// 类型推断,也可以直接进行自动转换 
 float fnum = static_cast<float>(inum);
// cout<<fnum<<endl;
  int a[3]={1,2,3};
// 一维数组参数传递 
  display(a,3);
}
//函数参数为const,则不能修改 
//或者 display(const int *x,int n)
void display(const int x[],int n){
	for(int i=0;i<n;i++){
//		设置域宽,计算宽度把输出内容也算在里面
//	    默认左对齐,循环输出则需要放在里面,当setw放在输出内容后面时,则先输出后再计算宽度 
		cout<<x[i]<<setw(10);
	}
	cout<<endl;
}

二维数组创建

主要包括非动态数组的创建,动态数组的创建

#include<iostream>
#include<iomanip>
#include<cstdlib>
#include<ctime>
using namespace std;
//这里是二维动态数组,分配的空间不是连续的
//必须是动态分配的才能传入 **p这种形式的参数
void display(int **p, int row,int col) {
	for(int i=0; i<row; i++) {
		for(int j=0; j<col; j++) {
			cout<<p[i][j]<<"\t";
		}
		cout<<endl;
	}
}
//第一种方式:空间不连续 
int test() {
	const int ROW = 2;
	const int COL = 3;
	//非动态创建,ROW,COL必须是const为常数
	int arr[ROW][COL];
	//动态创建
	int **ptr = NULL;
	int drow=2,dcol=3;
	//分配行
	ptr = new int *[drow];
	//传入时间作为随机数种子,每次运行结果都会不同
	srand(time(0));
	for(int i=0; i<drow; i++) {
		//分配列
		ptr[i] = new int[dcol];
		//赋值
		for(int j=0; j<dcol; j++) {
//			用随机数初始化
			ptr[i][j] = rand()%100+1;
//			cout<<ptr[i][j]<<"\t";
		}
	}
	//二维动态数组输出方式
	display(ptr,drow,dcol);
	//动态分配的数组需要删除
	for(int i=0; i<drow; i++) {
		delete []ptr[i];
	}
	//分配的空间要逐一删除 
	delete []ptr;

}
//第二种方式,空间连续 
void test_2(){
	int row = 4;
	int col = 3;
	int **p = new int *[row];
	//p[0]看作首地址 
	p[0] = new int[row*col];
	//依次分配 p[1],p[2]...空间 
	for(int i=1;i<row;i++){
		p[i] = p[i-1]+col;
	}
	
	//使用 
	int k = 0;
	for(int i=0;i<row;i++){
		for(int j=0;j<col;j++){
			p[i][j] = k;
			k += 1;
		}
	} 
	//输出结果 
//	for(int i=0;i<row;i++){
//		for(int j=0;j<col;j++){
//			cout<<p[i][j]<<"\t";
//		}
//		cout<<endl;
//	}
	//空间是连续的直接删除 
	delete []p[0];
//	动态分配,所以第一个参数可传入指针 
	display(p,row,col); 
	
}

int main() {
//	test();
	test_2();

}

二维数组类型的参数传递与输出

主要有两种参数传递主要有两种方式:

  1. 指定列的大小进行参数传递
  2. 使用一维数组方式传递
#include<iostream>
#include<iomanip>
using namespace std;
void show(float a[][3],int); 
void show_2(float *p, int row,int col);
const int COL = 3;
int main() {
//  二维数组参数传递及输出 
	float b[2][COL] = {{3.14159,2.732,5.256},{3.333,4.44,5.77}};
	show(b,2); 
//	二维数组变为一维数组输出 
//	show_2(b[0],2,COL);
}

//二维数组,COL参数与实际的一致,必须是数字或const类型 
//这个数组不是动态分配,不能使用形如show(float **a,int row,int col)这种形式,因为这个不能直接转为指针
void show(float a[][COL],int row){
	for(int i=0;i<row;i++){
		for(int j=0;j<COL;j++){
			cout.width(10);
//			设置为定点小数格式,保留2位小数点,输出刑如:3.14 
//			cout<<setiosflags(ios_base::fixed)<<a[i][j];可简化为fixed 
			cout<<fixed<<setprecision(2)<<a[i][j];
		}
		cout<<endl;
	}
//	设置对齐方式,设置左对齐 
//	cout<<setiosflags(ios_base::left)<<endl; 
//	清除左对齐 
//	resetiosflags(ios_base::left);
}
//二维数组输出变为一维数组输出 
void show_2(float *p, int row,int col){
	for(int i=0;i<row*col;i++){
		cout<<*p++<<"\t";
		if((i+1)%col==0){
			cout<<endl;
		}
	}
}          
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值