gpt4 book ai didi

c++ - 通过指针打印矩阵

转载 作者:搜寻专家 更新时间:2023-10-31 01:09:42 25 4
gpt4 key购买 nike

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 循环的定义/p>

最佳答案

int* ptr = *mat;

相当于

int *ptr = i1;

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

要在数组中移动,您需要

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

会更具可读性)

关于c++ - 通过指针打印矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16748587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com