passerende string naar een functie in C – met of zonder aanwijzingen?

Wanneer ik een touw aan de functie passeer, gebruik ik soms

char *functionname(char *name[256])

En soms gebruik ik het zonder aanwijzingen (bijvoorbeeld:

char functionname(char name[256])

Mijn vraag is, wanneer moet ik aanwijzingen gebruiken? Vaak schrijf ik programma’s zonder aanwijzingen en het werkt, maar soms doet het dat niet.


Antwoord 1, Autoriteit 100%

Het geaccepteerde Verdrag van het doorgeven van C-strings naar functies is om een ​​aanwijzer te gebruiken:

void function(char* name)

Wanneer de functie de reeks wijzigt, moet u ook in de lengte doorgeven:

void function(char* name, size_t name_length)

Uw eerste voorbeeld:

char *functionname(char *name[256])

passeert een reeks aanwijzingen op snaren die helemaal niet nodig is.

Uw tweede voorbeeld:

char functionname(char name[256])

passeert een reeks tekens. De grootte van de array hier doet er niet toe en de parameter zal toch tot een aanwijzer vervallen, dus dit is gelijk aan:

char functionname(char *name)

Zie ook Deze vraag voor meer informatie over array-argumenten in c.


Antwoord 2, Autoriteit 4%

Aangenomen dat u het wilt schrijven

char *functionname(char *string[256])

Hier declareer je een functie die een array van 256 pointers naar charals argument meeneemt en een pointer naar char retourneert. Hier, aan de andere kant,

char functionname(char string[256])

Je declareert een functie die een array van 256 chars als argument nodig heeft en een charretourneert.

Met andere woorden, de eerste functie neemt een array van strings en retourneert een string, terwijl de tweede een string neemt en een teken retourneert.


Antwoord 3

Een array is een pointer. Het wijst naar het begin van een reeks “objecten”.

Als we dit doen: ìnt arr[10];, dan is arreen pointer naar een geheugenlocatie, waaruit tien gehele getallen volgen. Ze zijn niet geïnitialiseerd, maar het geheugen is toegewezen. Het is precies hetzelfde als int *arr = new int[10];doen.

Other episodes