[英]Pass array by reference and modify values C++
我想編寫一個函數,它接受inArray[3] = {1,2,3,4}
和outArray[3]
,並修改outArray[3]
,現在包含values = {3,4,1, 2}。
int main{
int inArray[4] = {1,2,3,4};
int outArray[4];
myFunction(&inArray, &outArray);
}
void myFunction(&inArray, &outArray){
outArray[0] = inArray[2];
outArray[1] = inArray[3];
outArray[2] = inArray[0];
outArray[3] = inArray[1];
}
我在這里做錯了,我並不完全理解如何通過引用傳遞數組並操縱函數內部的值。
功能及其調用可以通過以下方式查看
const size_t N = 4;
void myFunction( int ( &inArray )[N], int ( &outArray )[N] )
{
outArray[0] = inArray[2];
outArray[1] = inArray[3];
outArray[2] = inArray[0];
outArray[3] = inArray[1];
}
int main()
{
int inArray[N] = {1,2,3,4};
int outArray[N];
myFunction( inArray, outArray );
}
考慮到你對數組的定義
int inArray[3] = {1,2,3,4};
包含拼寫錯誤,不會被編譯。 必須至少有喜歡
int inArray[4] = {1,2,3,4};
要么
int inArray[] = {1,2,3,4};
您的數組大小為3,但您嘗試在其中存儲4個元素並訪問[3]
處的第四個元素(具有未定義的行為)。
使它們更大,硬編碼4或使所有內容自動調整到用於初始化inArray
的數字列表的當前長度:
int inArray[] = {1,2,3,4}; // automatically sized
int outArray[sizeof inArray / sizeof *inArray];
然后,您的函數簽名應指定參數的array-of- int
。 有很多方法可以做到這一點:
void myFunction(const int inArray[], int outArray[]) // 1
void myFunction(const int* inArray, int* outArray) // 2
void myFunction(const int (&inArray)[4], int (&outArray)[4]) // 3
template <size_t N>
void myFunction(const int (&inArray)[N], int (&outArray)[N]) // 4
第一個顯然是最簡單的。
第二個是等價的,因為當調用者傳遞數組參數時,它們被允許衰減為指針,甚至1)也會發生這種情況,因為只有在通過引用接受數組時才能捕獲或強制執行數組維,如下例所示。 ..
第三個另外確保數組參數恰好有4個元素(所以突然你不能(輕松)傳遞說10個元素的數組並且只復制前4個元素)。
第四個接受任何大小的數組,但如果在不同大小的數組上使用不同的調用代碼,它可能會創建myFunction
代碼的多個副本,可能會為更大的程序使用更多的內存。
由於你是對元素[0]
到[3]
函數體硬編碼操作,它不會調整為在元素上進一步做大的數組,但你可以選擇在函數體內使用N
值來計算要操作多少元素。
數組總是通過引用傳遞,無需通過引用手動傳遞它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.