如何以指针表示法和数组表示法循环遍历2d数组

时间:2015-04-30 01:46:59

标签: c++ arrays loops pointers

我是c ++的新手,所以我想问一个简单的问题,但我似乎无法找到答案。 我正在尝试编写一个函数,它将打印二维整数数组的所有元素并打印其内容。我试图使用指针表示法使用数组表示法。我不知道将什么发送到指针表示法的方法。到目前为止,这是我的代码:

#include <iostream>
using namespace std;


void arrayNotation(int array[][4], int row){
    for (int i = 0; i < row; i++){
        for (int j = 0; j < 4; j++){
            cout << array[i][j];
        }
        cout << "\n";
    }
    cin.get();
}
void pointerNotation(){//i dont know what to send it
    for (int i = 0; i<4; i++){
        for (int j = 0; j<4; j++){
            cout << (*(*(array + i) + j));
        }
    }

}
int main(){     
    int array[2][4] = { { 467, 223, 189, 100 }, { 222, 561, 489, 650 } };
    arrayNotation(array, 2);
    pointerNotation();//how do you send it in to be pointer notation?

    return 0;
}

谢谢!

3 个答案:

答案 0 :(得分:2)

您需要的是

void pointerNotation(int (*array)[4]) // pass pointer to array-of-4 ints

但上述内容与int array[][4]完全相同,因为后者只是语法糖。

请注意,您无法执行

void pointerNotation(int**)

int[][4]不会衰减到int**。后者更灵活,前者只是指向4-int的数组的指针。

答案 1 :(得分:0)

我更喜欢显式传递行数和列数。这样,一种方法可能如下。

void pointerNotation(const int * const pArray, const int ROWS, const int COLS) { 
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            const int offset = i * ROWS + j;
            cout << *(pArray + offset);   // or pArray[offset]
        }
    }
}

呼叫

pointerNotation(array, 2, 4);

答案 2 :(得分:0)

您可以设置2D数组,也可以通过2种不同的方式发送它们。

#include <iostream>

using namespace std;

void pointerNotation(int (*array)[4]){//i dont know what to send it
    for (int i = 0; i<2; i++){
        for (int j = 0; j<4; j++){
            cout << (*(*(array + i) + j)) << " ";
        }
        cout << endl;
    }

}

void pointerNotation2(int **array){//i dont know what to send it
    for (int i = 0; i<2; i++){
        for (int j = 0; j<4; j++){
            cout << (*(*(array + i) + j)) << " ";
        }
        cout << endl;
    }
}

int main(){     
    int array[2][4] = { { 467, 223, 189, 100 }, { 222, 561, 489, 650 } };

    int **array2 = new int*[2];
    for (int i = 0; i < 2; i++) {
        *(array2 + i) = new int[4];
    }

    // copying for second array
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 4; j++) {
            *(*(array2 + i) + j) = *(*(array + i) + j);
        }
    }

    pointerNotation(array);

    pointerNotation2(array2);

    return 0;
}

输出

467 223 189 100 
222 561 489 650 
467 223 189 100 
222 561 489 650