我試圖將一個二維整數陣列從我在 cpp 程式中的主函式傳遞給另一個函式,并在另一個函式中操作二維陣列。雖然我以前做過這個,但已經有一段時間了,所以我正在關注這個公認的答案:
直接鏈接來回答問題下面的程式是直接模仿的
然而,雖然在我看來一切正常,但答案中建議的方法中有 2/3 失敗了。我在下面粘貼的內容中洗掉了與錯誤無關的任何內容,希望可以讓您更容易理解我的意思。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int LINES_IN_FILE = 500;
int NUMS_PER_LINE = 4;
void change2dArrayMethod1(int (*lines)[LINES_IN_FILE][NUMS_PER_LINE]) {
(* lines)[0][0] = 1;
(* lines)[0][1] = 2;
(* lines)[0][2] = 3;
(* lines)[0][3] = 4;
}
void change2dArrayMethod2(int lines[][NUMS_PER_LINE]) {
lines[0][0] = 1;
lines[0][1] = 2;
lines[0][2] = 3;
lines[0][3] = 4;
}
void change2dArrayMethod3(int lines[]) {
lines[0] = 1; //not sure how to access entire array here
}
int main() {
int coordLines[LINES_IN_FILE][NUMS_PER_LINE];
// METHOD 1
// Fails with error:
// Cannot initialize a variable of type 'int (*)[LINES_IN_FILE][NUMS_PER_LINE]'
// with an rvalue of type 'int (*)[LINES_IN_FILE][NUMS_PER_LINE]'clang(init_conversion_failed)
int (*p1_coordLines)[LINES_IN_FILE][NUMS_PER_LINE] = &coordLines;
// Fails with error:
// No matching function for call to 'change2dArrayMethod1'clang(ovl_no_viable_function_in_call)
// test.cpp(10, 6): Candidate function not viable: no known conversion from 'int (*)[LINES_IN_FILE][NUMS_PER_LINE]' to
// 'int (*)[LINES_IN_FILE][NUMS_PER_LINE]' for 1st argument
change2dArrayMethod1(p1_coordLines);
// METHOD 2
// Fails with error:
// Cannot initialize a variable of type 'int (*)[NUMS_PER_LINE]' with an lvalue of type 'int [LINES_IN_FILE][NUMS_PER_LINE]'clang(init_conversion_failed)
int (*p2_coordLines)[NUMS_PER_LINE] = coordLines;
// Fails with error:
// No matching function for call to 'change2dArrayMethod2'clang(ovl_no_viable_function_in_call)
// test.cpp(17, 6): Candidate function not viable: no known conversion from 'int (*)[NUMS_PER_LINE]' to 'int (*)[NUMS_PER_LINE]' for 1st argument
change2dArrayMethod2(p2_coordLines);
// METHOD 3
// Doesn't fail - however not sure how to manipulate array in function called
int *p3_coordLines = coordLines[0];
change2dArrayMethod3(p3_coordLines);
}
此外,當使用建議的第三種方法時,我不確定賦值是如何作業的,甚至不確定如何訪問陣列中的值。
我已經在每次呼叫第二個函式的上方粘貼了 clang 編譯器在注釋中給出的錯誤。除了main之外的函式沒有任何錯誤,它們是直接從上面鏈接的答案中提取的。但是,我也以上述鏈接為每種方法建議的相同方式傳遞了 2D 陣列,所以我真的不知道這里出了什么問題。
uj5u.com熱心網友回復:
陣列在運算式中使用時會衰減為指向其第一個元素的指標。
所以一個 type 的變數int [LINES_IN_FILE][NUMS_PER_LINE]衰減為 type int (*)[NUMS_PER_LINE],后者在函式宣告中也可以表示為int [][NUMS_PER_LINE]
所以你想使用這個函式:
void change2dArrayMethod2(int lines[][NUMS_PER_LINE]) {
并直接傳遞陣列:
change2dArrayMethod2(coordLines);
此外,C 不允許陣列索引使用非常量值。您需要設定以下值const:
const int LINES_IN_FILE = 500;
const int NUMS_PER_LINE = 4;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/375251.html
