Hvad er forskellen mellem "char * A []" og "char ** A" på C-sprog?


Svar 1:

char * a [] er en række pointere for char type-variabler, hvorimod char ** a definerer en markør til en pointervariabel for char type variabel.

for f.eks

char c = 'a'; // værdi af c = 2

char * p = & c;

// pointer p peger på c-variabel

char ** pp = & p;

// pp peger på markøren p, der peger på variabel c

For mere information henvises til URL: http: //www.thegeekstuff.com/2012 ...


Svar 2:

char * A [] er en matrix, og char ** A er en markør. I C kan array og pointer ofte udskiftes, men der er nogle forskelle:

1. med "char * A []" kan du ikke tildele nogen værdi til A, men kun A [x];

med "char ** A" kan du også tildele værdi til A og A [x].

2. med "char * A []" kan du initialisere en matrix (f.eks. Char * A [] = {"foo", "bar"};) og bruge størrelseof (A) til at få størrelsen (på 64-bit maskine, ovenstående eksempel giver dig 16, fordi det er en matrix med to char *);

med "char ** A" returnerer størrelseof (A) altid størrelsen på en markør (på 64-bit maskine, 8).


Svar 3:
  1. char * A [] betyder "en række markører til tegn", hvorimod char ** A betyder "en markør til en markør til en char." Bemærk, at den første eksplicit fortæller dig, at vi arbejder med en matrix, mens den anden ikke giver en sådan garanti. Ved konstruktion er begge imidlertid ækvivalente med C, fordi en matrix er gemt som en markør til det første element i den array. En række pegere er et specielt eksempel på en markør til en markør; en markør til en markør er ikke nødvendigvis en række pointer. For at demonstrere dette, skal du bemærke, at du til en markørarray-arrp kan tildele char ** A = (char **) (void *) arrp, men du kan ikke (dvs. det kaster en compiler-fejl) char * A [] = ( char * []) ​​(void * []) ​​arrp; - I virkeligheden kan du ikke instantiere og array uden at give det et længde-argument, og du kan heller ikke afgive til arrays, kun pointer

Svar 4:

Den første er en markør [1] til dets første element (alias array), det andet kan være typen af ​​pegeren til en række karakterstrenge [2], for eksempel.

Med andre ord arrays forfald i pegepinde alligevel og dermed kun et syntaktisk sukker (så længe du overser anmodningerne om størrelsesfordeling i tilfælde af matriser)

[1] I modsætning til int * er char * en universal pointer-type.

[1] strenge føres rundt som nul-afsluttede arrays, i sig selv.

For flere eksempler se

Ken Greggs svar på Hvornår skal jeg definere dobbeltpunkter i argv- i C-hovedprogrammet som et argument?

Sergey Zubkovs svar på Er der arrays af arrays mulige i C?

John L. Millers svar på Er der matriser af arrays mulige i C?