在為分配給我的練習撰寫一個相當簡單的代碼時,我遇到了這個問題。練習要求我創建一個函式(它做什么并不重要,但它回圈遍歷矩陣的每個元素以做某事)獲取二維陣列(NxM)和一個雙精度陣列(在函式中使用)作為引數。函式看起來像這樣:
int function(int (*myarray)[M], double y){}
現在,如果我沒有遺漏任何東西,這還不夠,因為如果不使用值 N 作為范圍,我將無法遍歷元素。我對嗎?如果在不將其作為引數傳遞的情況下無法使用此函式內部的行數,則意味著該練習理所當然地認為傳遞矩陣意味著也傳遞 N(行)作為引數。
(我考慮過使用 sizeof 以某種方式獲取行數,但是 function(){} 內部的 sizeof(myarray) 沒有按預期作業。這個函式內部的 myarray 和我在 main( 中宣告的原始 myarray 有什么區別? )?)
myarray 被宣告為int myarray[N][M];,然后使用包含myarray[i][j] = rand()%(max-min 1) min;. 我認為這與問題不太相關,但我將其包括在內以解釋它是自動分配的。
我已經檢查了一些類似的討論,例如this和this,但是由于每個人都將尺寸作為引數,所以我還沒有找到答案。
uj5u.com熱心網友回復:
我可以在函式中使用矩陣而不指定 ROWS 嗎?”
答案很大程度上是否定的。該函式必須有某種方式知道要從陣列中使用多少資料。那不一定是陣列的原始大小;它可以是陣列的數量,也可以是陣列的一部分,呼叫者希望函式對其進行操作。C 標準沒有提供任何方法來通過指標了解陣列的原始大小。
該資訊可以通過多種方式提供給函式:通過引數、通過外部變數,包括通過標記值。
現在,如果我沒有遺漏任何東西,這還不夠,因為如果不使用值 N 作為范圍,我將無法遍歷元素。我對嗎?
傳遞陣列中的行數是一種能夠遍歷它們的方法。該資訊可以通過其他方式提供。在您的情況下,傳遞行數可能是預期的方法。
這個函式中的 myarray 和我在 main() 中宣告的原始 myarray 有什么區別?)
當函式引數宣告為陣列時,它會自動調整為指標。所以,如果一個引數被宣告為int myarray[N][M],它會自動調整為int (*myarray)[M]。那么myarray函式內部不是陣列;它是一個指標。
當陣列作為引數傳遞給函式時,它會自動轉換為指向其第一個元素的指標。每當在運算式中使用陣列時,都會發生這種自動轉換,除了作為的運算元sizeof或運算元,unary &或者當它是用于初始化陣列的字串文字時。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/532112.html
標籤:数组C功能矩阵
