【问题标题】:print a matrix through a pointer通过指针打印矩阵
【发布时间】:2013-05-25 10:23:02
【问题描述】:
int** mat = new int*[5];

// define the elements to be inserted to the matrix     
int* i1 = new int;
*i1 = 1;

int* i2 = new int;
*i2 = 2;

int* i3 = new int;
*i3 = 3;

int* i4 = new int;
*i4 = 4;

int* i5 = new int;
*i5 = 5;

// insert the elements to the matrix
mat[0] = i1;
mat[1] = i2;
mat[2] = i3;
mat[3] = i4;
mat[4] = i5;

现在我定义了指针。我想通过这个指针打印矩阵。所以我定义它:

int* ptr = *mat;

我在这里打印它:

for (int i = 0; i < 5; i++) {
    cout << *ptr << endl;
    ptr++;
}

但我得到了:

1
2543679
9826
257678
7853

请记住,我想通过指针打印它(并执行 ++),因此仅与 ptrfor loop 的定义相关

【问题讨论】:

    标签: c++ pointers matrix


    【解决方案1】:
    int* ptr = *mat;
    

    在这里等价于

    int *ptr = i1;
    

    所以你让ptr 指向与i1 相同的位置。然后递增ptr 使其指向int 后面i1 指向的位置。您还没有在那里分配(和填充)内存,因此取消引用递增的指针会调用未定义的行为(并且递增它会进一步调用未定义的行为,即使没有取消引用)。

    要在数组中移动,您需要

    int **ptr = mat;
    for (int i = 0; i < 5; i++) {
        cout << **ptr << endl;
        ptr++;
    }
    

    (但使用下标

    for(int i = 0; i < 5; ++i) {
        cout << *mat[i] << endl;
    }
    

    会更易读)

    【讨论】:

    • 呸,打败我了 :P 另外,你可能想添加一行,说明他可能想为每一行做 new int[no_of_columns]?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    相关资源
    最近更新 更多