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
请记住,我想通过指针打印它(并执行++),因此仅涉及ptr
和for loop
答案 0 :(得分:4)
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;
}
会更具可读性)