如何通過引用傳遞靜態分配的數組?通過引用傳遞數組
void foo(int (&myArray)[100])
{
}
int main()
{
int a[100];
foo(a);
}
是否(&myArray)[100]
有任何意義或它只是一個語法按引用傳遞任何陣列? 我不明白單獨的括號後面跟着大括號。謝謝。
如何通過引用傳遞靜態分配的數組?通過引用傳遞數組
void foo(int (&myArray)[100])
{
}
int main()
{
int a[100];
foo(a);
}
是否(&myArray)[100]
有任何意義或它只是一個語法按引用傳遞任何陣列? 我不明白單獨的括號後面跟着大括號。謝謝。
這是數組引用的語法 - 您需要使用(&array)
來向編譯器說明您希望對數組引用,而不是引用int & array[100];
的(無效)數組。
編輯:一些澄清。
void foo(int * x);
void foo(int x[100]);
void foo(int x[]);
這三種是聲明相同功能的不同方式。他們都被視爲採取int *
參數,您可以傳遞任何大小的數組給他們。
void foo(int (&x)[100]);
這隻接受100個整數的數組。這是不合法的 - 你可以在x
void foo(int & x[100]); // error
這被解析爲「中引用數組」安全使用sizeof
。
爲什麼我們不能有一個引用數組例如'int a,b,c; int arr [3] = {a,b,c};'? – Vorac 2016-01-07 13:10:53
啊哈,發現[爲什麼](http://stackoverflow.com/questions/1164266/why-arrays-of-references-are-illegal#1164306)。 – Vorac 2016-01-08 13:51:50
有人可以解釋爲什麼'void foo(int&x [100]);'被解析爲「引用數組」?是因爲「從右到左」的規則?如果是的話,它似乎不符合'void foo(int(&x)[100]);'被解析爲「對數組的引用」。提前致謝。 – zl9394 2017-02-11 00:52:34
這只是所需的語法:
^通行證陣列100int
通過引用
void Func(int (&myArray)[100])
的參數的名稱是myArray
;
void Func(int* myArray)
^傳遞數組。數組衰減到一個指針。因此你失去了尺寸信息。
void Func(int (*myFunc)(double))
^傳遞函數指針。該函數返回一個int
並採取double
。參數名稱是myFunc
。
我們如何傳遞一個可變大小的數組作爲參考? – 2017-06-29 08:07:50
@ShivamArora您可以對函數進行模板化並將大小設置爲模板參數。 – 2017-06-29 15:53:00
它是一種語法。在函數參數int (&myArray)[100]
括號&myArray
的括號是必要的。如果您不使用它們,那麼您將傳遞array of references
,這是因爲subscript operator []
的優先級高於& operator
。
例如int &myArray[100] // array of references
因此,通過使用type construction()
,您告訴編譯器您需要引用一個由100個整數組成的數組。
E.g int (&myArray)[100] // reference of an array of 100 ints
數組是違約指針傳遞。您可以嘗試修改函數調用中的數組以便更好地理解。
數組無法按值傳遞。如果函數接收到一個指針,則數組會衰減到指向其第一個元素的指針。我不確定你在這裏想說什麼。 – 2015-07-19 08:50:24
@UlrichEckhardt我想說的是,「數組無法通過值傳遞」,如前所述,它們默認通過引用傳遞 – 2015-07-24 21:52:30
數組既沒有被傳遞,也沒有被傳遞。他們通過指針傳遞。如果數組默認情況下是通過引用傳遞的,那麼使用sizeof就沒有問題了。但事實並非如此。數組傳遞到函數時會衰減指針。 – user3437460 2016-05-27 16:43:36
是否有任何與函數參數的左值和右值的關係? – 2011-04-20 00:16:14
可能的重複[什麼是有用的數組引用參數?](http://stackoverflow.com/questions/2188991/what-is-useful-about-a-reference-to-array-parameter) – AnT 2011-04-20 00:25:59
[有關引用數組參數的有用信息?](https://stackoverflow.com/questions/2188991/what-is-useful-about-a-reference-to-array-parameter) – anatolyg 2017-07-08 23:07:43