【c++】new一个新数组时数组地址变化的现象

若new生成数组的时候,无论每一行的行数组大小是否相同,其一维指针与实际元素存放的地址完全不同。

#include<iostream>
using namespace std;

int main(void) {


	int** dp = new int* [5 + 1];
	for (int i = 0; i <= 5; i++) {
		dp[i] = new int[i];
		//初始化dp矩阵。
	}
	for (int i = 0; i <= 5; i++) {
		cout << "dp[" << i << "]:" << &dp[i] << endl;
		for (int j = 0; j <= i; j++) {
			cout << "dp[" << i << "]" << "[" << j << "]:";
			cout << &dp[i][j] << endl;
		}
	}
}

则地址的现象如下图所示:
在这里插入图片描述
可以发现一维指针(dp[0],dp[1]…)的值被单独存储在内存中的某一个空间内。
实际的元素(dp[0][0],dp[0][1]…)的值存放在了内存中另一个空间内。

每一行元素个数相同的现象:

#include<iostream>
using namespace std;

int main(void) {


	int** dp = new int* [5 + 1];
	for (int i = 0; i <= 5; i++) {
		dp[i] = new int[5 + 1];
		//初始化dp矩阵。
	}



	for (int i = 0; i <= 5; i++) {
		cout << "dp[" << i << "]:" << &dp[i] << endl;
		for (int j = 0; j <= 5; j++) {
			cout << "dp[" << i << "]" << "[" << j << "]:";
			cout << &dp[i][j] << endl;
		}
	}
}

在这里插入图片描述
dp[0]和dp[0][0]的位置完全不相同,可见一斑。

而若直接不使用new,而是直接使用int dp[6][6]这种形式,则二维数组十分整齐。

#include<iostream>
using namespace std;

int main(void) {


	int dp[6][6] = { 0 };



	for (int i = 0; i <= 5; i++) {
		cout << "dp[" << i << "]:" << &dp[i] << endl;
		for (int j = 0; j <= 5; j++) {
			cout << "dp[" << i << "]" << "[" << j << "]:";
			cout << &dp[i][j] << endl;
		}
	}
}

在这里插入图片描述
dp[0]等于dp[0][0],与[]运算符的规则:dp[x] = *(dp + x)符合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

两米长弦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值