当前位置:首页 > 编程笔记 > 正文
已解决

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

来自网友在路上 177877提问 提问时间:2023-10-10 11:34:27阅读次数: 77

最佳答案 问答题库778位专家为你答疑解惑

若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)符合。

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"【c++】new一个新数组时数组地址变化的现象":http://eshow365.cn/6-18342-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!