C++/C数组讲解

数组

概念:一个用于存放相同数据类型的集合/容器。

特点:
1.数组中的元素的数据类型都是相同的;
2.数组占用的是一段连续的空间

索引:
索引都是从0开始的,这里面的0相当于我们日常使用中的1。只是换了一种方式而已。

数组名的规范:
1.数组名的命名规范和变量的命名规范一样,且数组名和变量名不能重复。

#include<iostream>
#include<string>
#include<cstdio>
#include<cstdlib>
#include<iomanip>


using namespace std;


int main(void){
	//一维数组的声明
	//方式一:数据类型 数组名称[长度];
	int array_0001[5];//直接指定数组的长度
	
	//方式二:数据类型 数组名称[长度] = {值};
	int array_0002[5] = {1,2,3};//值的个数<数组的长度
	
	//方式三:数据类型 数组名称[] = {值};
	int array_0003[] = {1,2,3,4,5,6};//值的个数决定数组的大小


	cout << "array_0002的地址是:" << array_0002 << endl;//数组名称代表的是数组的首地址
	cout << "&array_0002[0]是:"  << &array_0002[0] << endl;//数组首元素的地址和数组名称的地址是相同的
	cout << "数组array_0002的长度为" << sizeof(array_0002) / sizeof(array_0002[0]) << endl;

	//输出结果:
	//array_0002的地址是:0x6ffdc0
	//&array_0002[0]是:0x6ffdc0
	//数组array_0002的长度为5


	/*
	虽然说数组名称和数组首元素都可以得到数组的地址,但是这两个还是有所不同的。
	我理解的是:数组首元素的地址,只能代表该元素的地址;而数组名称反应出来的地址是数组的首地址,可通过数组名称来计算数组的长度。
	sizeof(数组名称) /sizeof(数组名称[0])
	*/



	//一维动态数组(使用指针声明的)数据类型* 数组名称;
	//方法一:
	int* array_0004;
	array_0004 = new int[5];

	//方法二:
	int* array_0005 = new int[5];

	if(array_0004 == NULL || array_0005 == NULL){
		cout << "内存分配错误" << endl;
		exit(1);
	}

	//方法一和方法二是相同的效果,只不过是方法二将方法一中的两个步骤合并为了一个步骤。

	delete[] array_0004,array_0005;



/*
二维数组:
声明:
数据类型 数组名[ 行数 ][ 列数 ];

数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2} ,{数据3,数据4} };

数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};

数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};


对于二维数组的声明格式有以上四种,我们可以根据不同的使用情况来选择使用哪种声明格式进行声明。

*/
	int array_0006[3][3];
	int array_0007[3][3] = {{1,2,3},{1,2,3},{1,2,3}};
	int array_0008[3][3] = {1,2,3,1,2,3,1,2,3};
	int array_0009[][3] = {1,2,3,4,5,6,7};//3行3列,将缺少的值赋值默认值0;


//动态二维数组的申请:
	int** array_0010;
	array_0010 = new int*[3]; // 创建一个包含3个指针的一维数组
	if(array_0010 == NULL){
		cout << "内存分配错误" << endl;
			exit(1);
		} 
	}
	for(int i = 0;i < 3;i++){
		array_0010[i] = new int[3];/// 为每个指针分配一个包含3个整数的数组
	}
	for(int i = 0;i < 3;i++){
		if(array_0010 == NULL){
			cout << "内存分配错误" << endl;
			exit(1);
		}
	}


	for(int i= 0;i < 3;i++){
		cout << "请输入第"<< i + 1 <<"行的3个数字" << endl;
		for(int j = 0;j < 3;j++){
			cin >> array[i][j];
		}
	}


	/*
	关于数组名称在二维数组中的作用:
	
	反映占用内存空间大小:sizeof(arr)
	反映第 i 行占用内存空间大小:sizeof(arr[i])
	反映某个元素占用内存空间大小:sizeof(arr[i][j])
	
	反映二维数组的行数:sizeof(arr) / sizeof(arr[0])
	反映二维数组的列数:sizeof(arr[0]) / sizeof(arr[0][0])

	获取二维数组的首地址:
	二维数组首地址:arr[0] 或 &arr[0][0]	
	二维数组第1个元素的地址: arr[0] 或 &arr[0][0]
	二维数组第 0 行的地址: arr或arr[0]或arr + 0 【或*(arr + 0)】
	二维数组第 i 行的地址:arr[i]或arr + i 【或*(arr + i)或&a[0] + i】

	
	注意:
	注:arr[0]或&arr[0][0]:二维数组首元素的地址 ;
	二维数组名arr:二维数组第0行(首行)的地址,等价于arr[0]或arr + 0

	二维数组第 i 行首元素的地址:arr[i]或arr + i或*(arr + i)或&a[0] + i
	二维数组第 i 行第 j 列元素的地址:&arr[i][j]或*(arr + i) + j


	通过指针解引用访问或操作某元素:*(*(arr + i) + j)

	*/



	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值