Een array doorgeven via referentie

Hoe werkt het doorgeven van een statisch toegewezen array door middel van referentie?

void foo(int (&myArray)[100])
{
}
int main()
{
    int a[100];
    foo(a);
}

Heeft (&myArray)[100]enige betekenis of is het slechts een syntaxis om een ​​array als referentie door te geven?
Ik begrijp hier geen aparte haakjes gevolgd door grote haakjes. Bedankt.


Antwoord 1, autoriteit 100%

Het is een syntaxis voor arrayverwijzingen – je moet (&array)gebruiken om de compiler duidelijk te maken dat je een verwijzing naar een array wilt, in plaats van de (ongeldige) array van verwijzingen int & array[100];.

EDIT: enige verduidelijking.

void foo(int * x);
void foo(int x[100]);
void foo(int x[]);

Deze drie zijn verschillende manieren om dezelfde functie te declareren. Ze worden allemaal behandeld als het nemen van een int *parameter, je kunt er elke grootte array aan doorgeven.

void foo(int (&x)[100]);

Dit accepteert alleen arrays van 100 gehele getallen. Je kunt sizeofveilig gebruiken op x

void foo(int & x[100]); // error

Dit wordt geparseerd als een “array van referenties” – wat niet legaal is.


Antwoord 2, autoriteit 23%

Het is gewoon de vereiste syntaxis:

void Func(int (&myArray)[100])

^ Geef array van 100 intdoor als referentie, de naam van de parameter is myArray;

void Func(int* myArray)

^ Geef een array door. Array vervalt tot een aanwijzer. Zo verlies je maatinformatie.

void Func(int (*myFunc)(double))

^ Geef een functiewijzer door. De functie retourneert een inten neemt een double. De parameternaam is myFunc.


Antwoord 3, autoriteit 12%

Het is een syntaxis. In de functie zijn argumenten int (&myArray)[100]haakjes nodig die de &myArrayomsluiten. als u ze niet gebruikt, geeft u een array of referencesdoor en dat komt omdat de subscript operator []een hogere prioriteit heeft dan de & operator.

Bijvoorbeeld int &myArray[100] // array of references

Dus, door type construction ()te gebruiken, vertel je de compiler dat je een verwijzing naar een array van 100 gehele getallen wilt.

Bijvoorbeeld int (&myArray)[100] // reference of an array of 100 ints


Antwoord 4, autoriteit 3%

Het volgende creëert een generieke functie, waarbij een array van elke grootte en van elk type als referentie wordt gebruikt:

template<typename T, std::size_t S>
void my_func(T (&arr)[S]) {
   // do stuff
}

speel met de code.


Antwoord 5, autoriteit 2%

Arrays worden standaard doorgegeven door pointers. Je kunt proberen een array binnen een functieaanroep te wijzigen voor een beter begrip.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes