我试着用C++创建一个矩阵,它有一个三角形的形状,像这样:
n=行数; 例如,如果我输入n=4,我的矩阵应该是这样的:1 23 456 789 10
我成功地完成了以下代码:
int n;
cout << "Introduceti n: ";
cin >> n;
int** a = new int*[n];
for (int i = 0; i < n; i++) {
a[i] = new int[i+1];
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < i+1; j++) {
*(*(a + i) + j) = (i * i + i) / 2 + j +1;
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < i+1; j++) {
cout << *(*(a + i) + j) << "|";
}
cout << endl;
}
问题是:如果我指示指针在[0][0]处停止初始化,为什么我可以访问[0][1]并且它显示给我一个值?
您可以访问内存,无论它是初始化的还是分配的。 由您编写代码来避免那些可能不想要的事件,或者建立相应的机制来检测它们。
所以,
为什么我可以访问[0][1]。。。
如上所述
。。。并且它向我显示了一个值,。。。
因为内存中的每一位都有一些值。
试试下面的代码,您大概就会明白自己在做什么了:
#include <iostream>
using namespace std;
int main() {
int n;
cout << "Introduceti n: ";
cin >> n;
int **a = new int*[n];
for (int i = 0; i < n; i++) {
a[i] = new int[i + 1];
}
cout << "Size of int is " << sizeof(int) << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < i + 1; j++) {
*(*(a + i) + j) = (i * i + i) / 2 + j + 1;
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < i + 1; j++) {
cout << *(*(a + i) + j) << "|";
}
cout << endl;
}
cout << "a[0][0] @" << &(a[0][0]) << "=" << a[0][0] << endl;
cout << "a[0][1] @" << &(a[0][1]) << "=" << a[0][1] << endl;
return 1;
}