Aanwijzer naar een string in C?

Ik weet dat ptrChareen aanwijzer is voor Char . Wat is het commando voor een aanwijzer op String ?

EDIT: Als het hetzelfde is (PTR naar Char versus PTR naar String) – wat vertegenwoordigt de variabele definitie hieronder?

char (*ptr)[N];

Ik ben in de war.


Antwoord 1, Autoriteit 100%

Dezelfde notatie wordt gebruikt voor het wijzen op een enkel teken of het eerste teken van een null-beëindigde string:

char c = 'Z';
char a[] = "Hello world";
char *ptr1 = &c;
char *ptr2 = a;      // Points to the 'H' of "Hello world"
char *ptr3 = &a[0];  // Also points to the 'H' of "Hello world"
char *ptr4 = &a[6];  // Points to the 'w' of "world"
char *ptr5 = a + 6;  // Also points to the 'w' of "world"

De waarden in ptr2en ptr3zijn hetzelfde; Doen zijn de waarden in ptr4en ptr5. Als u sommige gegevens als een reeks gaat behandelen, is het belangrijk om ervoor te zorgen dat het niet wordt beëindigd en dat u weet hoeveel ruimte er is om te gebruiken. Veel problemen worden veroorzaakt door niet te begrijpen welke ruimte beschikbaar is en niet weten of de string correct is beëindigd.

Merk op dat alle hierboven aanwijzingen kunnen worden gedepluceerd alsof ze een array waren:

*ptr1    == 'Z'
  ptr1[0] == 'Z'
 *ptr2    == 'H'
  ptr2[0] == 'H'
  ptr2[4] == 'o'
 *ptr4    == 'w'
  ptr4[0] == 'w'
  ptr4[4] == 'd'
  ptr5[0] ==   ptr3[6]
*(ptr5+0) == *(ptr3+6)

Late toevoeging aan vraag

Wat doet char (*ptr)[N];vertegenwoordigen?

Dit is een complexere beastie helemaal. Het is een aanwijzer naar een array van Ntekens. Het type is heel anders; De manier waarop het wordt gebruikt, is heel anders; de grootte van het punt dat naar voren is, is heel anders.

char (*ptr)[12] = &a;
(*ptr)[0] == 'H'
(*ptr)[6] == 'w'
*(*ptr + 6) == 'w'

Houd er rekening mee dat ptr + 1PUNTEN NAAR UNDEFINED GEBRUIKERD, MAAR PUNT ‘Eén array van 12 bytes’ voorbij het begin van a. Gegeven een iets ander scenario:

char b[3][12] = { "Hello world", "Farewell", "Au revoir" };
char (*pb)[12] = &b[0];

Nu:

(*(pb+0))[0] == 'H'
(*(pb+1))[0] == 'F'
(*(pb+2))[5] == 'v'

U zult waarschijnlijk niet de aanwijzingen tegenkomen tot arrays behalve redelijk al geruime tijd; Ik heb ze in de afgelopen 25 jaar een paar keer gebruikt, maar zo weinig dat ik de gelegenheden op de vingers van één hand kan tellen (en er zijn verschillende van die vragen over het beantwoorden van vragen over stack overflow). Nakennen dat ze bestaan, dat ze het resultaat zijn van het nemen van het adres van een array, en dat je waarschijnlijk niet wilde, je hoeft niet echt meer te weten over de aanwijzingen.


Antwoord 2, Autoriteit 44%

hetzelfde. Een C-string is niets anders dan een reeks tekens, dus een aanwijzer naar een string is een aanwijzer naar een reeks tekens. En een aanwijzer naar een array is hetzelfde als een aanwijzer naar het eerste element.


Antwoord 3, Autoriteit 4%

De tekenreeks wordt in principe begrensd vanaf de plaats waar ernaar wordt verwezen (char *ptrChar;), tot het nulteken (\0).
< br>De char *ptrChar;wijst eigenlijk naar het begin van de string (char array), en dat is dus de pointer naar die string,
dus als je bijvoorbeeld ptrChar[x]leuk vindt, heb je daadwerkelijk x keer toegang tot de geheugenlocatie na het begin van de char (ook bekend als waar ptrChar naar verwijst).

Other episodes