C ++指针打印出内存地址而不是数字

时间:2014-09-16 04:24:18

标签: c++ arrays

我真的不明白为什么这会输出内存地址而不是说{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;
    }

5 个答案:

答案 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;
}

Online Demo

正如其他人提到的,由于这是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;

在变量后面加一个通配符,你得到指针所指向的内容,而不是指针所持有的内存地址。