我有兩個在運行時創建的整數數組(大小取決於程序輸入)。在某些時候,我需要用一個數組的內容來更新數組的內容,並進行一些計算。是否可以將指針傳遞給數組並將其作爲函數參數傳遞?
首先,我想過將這些數組作爲參數傳遞給一個函數,因爲我沒有找到一種方法來在C中返回函數(不要認爲這是可能的)。意識到這是一個壞主意,因爲參數不能真正修改,因爲它們被複制到堆棧上,我改用數組指針來代替。
雖然功能仍然是空的,這是我的代碼:
1日起飛(代碼編譯,沒有錯誤):
// Elements is just to be able to iterate through their contents (same for both):
void do_stuff(int first[], int second[], int elements) {}
// Call to the function:
do_stuff(first, second, elements);
2日起飛,企圖轉換爲指針能夠修改陣列到位:
void do_stuff(int *first[], int *second[], int elements) {}
// Call to the function:
do_stuff(&first, &second, elements);
這個代碼導致一些應有的編譯時錯誤,因爲很明顯我認爲是指向數組是指針數組。
3取,我覺得這是正確的語法:
void do_stuff(int (*first)[], int (*second)[], int elements) {}
// Call to the function:
do_stuff(&first, &second, elements);
不過此代碼生成試圖訪問陣列(例如*first[0]
)的元素時,編譯時錯誤:
error: invalid use of array with unspecified bounds
所以我的問題是關於使用數組指針作爲函數的參數的可能性,有可能嗎?如果是這樣,那該怎麼辦?
無論如何,如果您想在執行包含第二個內容的計算後更新第一個數組的更好方法,請對其進行評論。
當您將一個數組作爲函數參數傳遞時,實際上您將一個指針傳遞給第一個元素,因此您可以使用該指針從函數修改數組。 –