我是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;
}
谢谢!
答案 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