我真的不明白为什么这会输出内存地址而不是说{1,2,3,4,5}如果你输入5.如何解决这个问题?谢谢。
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int columnInput;
//int rowInput;
int** column = NULL;
cin >> columnInput;
column = new(int*[columnInput]);
for (int i = 0; i < columnInput; i++) {
column[i] = new(int[i + 1]);
}
cout << " |";
for (int i = 0; i < columnInput; i++){
cout << setw(3) << column[i] << "|";
}
cout << endl;
return 0;
}
答案 0 :(得分:1)
无论您是在寻找1D还是2D动态阵列,您的代码都不是很清楚。指向指针的指针变量和注释掉的rowInput
指向后者,但是使用简单(即非嵌套)for循环指向前者。如果您需要一维动态数组,学习者的答案可能就是您正在寻找的内容。否则,仔细看看:
#include <iostream>
#include <iomanip>
int main()
{
// I don't really like this, because it can easily lead to name clashes.
// If you really want it, not putting it in global scope is a good idea.
using namespace std;
int ** matrix = 0;
int rows;
int cols;
cin >> rows;
cin >> cols;
// The convention is that the first dimension denotes the number of rows.
// As an exercise, you can try to do the same with columns first.
matrix = new int * [rows]; // reserve pointers for all rows
for (int i = 0; i < rows; i ++) {
matrix[i] = new int[cols]; // reserve space for each row
}
// In order to access a 2D array you typically need nested for loops.
for (int i = 0; i < rows; i ++) {
for (int j = 0; j < cols; j ++) {
matrix[i][j] = 0;
matrix[i][j] += (i % 10) * 10; // <- try commenting this out
matrix[i][j] += j % 10 + 1; // <- same with this here
}
}
cout << endl;
// Same here.
for (int i = 0; i < rows; i ++) {
for (int j = 0; j < cols; j ++) {
cout << setw(3) << matrix[i][j] << "|";
}
cout << endl;
}
// Don't forget to do cleanup!
for (int i = 0; i < rows; i ++) {
delete [] matrix[i];
}
delete [] matrix;
return 0;
}
正如其他人提到的,由于这是C ++,因此使用std::vector
是更好的选择。在cplusplus.com上This nice article过来探讨了这个和其他选项。
答案 1 :(得分:0)
您正在打印指针。 operator<<
怎么可能知道指针指向的元素数量?它不能如果你想打印数组的内容或指针指向的内容,那么你必须自己编写。
答案 2 :(得分:0)
因为column
是指向整数的指针。int** column = NULL
直接打印column
会给你地址而不是整数值。
答案 3 :(得分:0)
如果您想根据用户输入分配动态内存并想要打印它的内容,请使用:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int columnInput;
int* column = NULL;
cin >> columnInput;
column = new int[columnInput];
for (int i = 0; i < columnInput; i++) {
column[i] = i;
}
cout << " |";
for (int i = 0; i < columnInput; i++){
cout << setw(3) << column[i] << "|";
}
cout << endl;
return 0;
}
答案 4 :(得分:-1)
如果要打印指针的值,则必须在变量前加上*。这告诉编译器&#34;嘿,这里有一个指针,给我什么指向&#34;
因此,如果ptr是一个指针,例如
*int ptr;
如果你想打印ptr的值:
cout << *ptr;
此逻辑适用于C / C ++中的每个变量。
如果你有
int*** listOfListsOfListsOfInts;
你想打印指向的内容,
cout << ****listOfListsOfListsOfInts;
在变量后面加一个通配符,你得到指针所指向的内容,而不是指针所持有的内存地址。