Quina diferència hi ha entre "char * A []" i "char ** A" en llenguatge C?


Resposta 1:

char * a [] és una matriu de punters per a variables de tipus char mentre que char ** a defineix un punter a una variable de punter de variable de tipus char.

per exemple

char c = 'a'; // valor de c = 2

char * p = & c;

// el punter p apunta a la variable c

char ** pp = & p;

// pp indica el punter p que apunta a la variable c

Per obtenir més informació, consulteu l’URL: http: //www.thegeekstuff.com/2012 ...


Resposta 2:

char * A [] és una matriu i char ** A és un punter. A C, la matriu i el punter sovint es poden intercanviar, però hi ha algunes diferències:

1. Amb "char * A []", no podeu assignar cap valor a A, sinó només A [x];

amb "char ** A", també podeu assignar valor a A, i A [x].

2. Amb "char * A []", podeu inicialitzar una matriu (per exemple, char * A [] = {"foo", "bar"};) i utilitzar sizeof (A) per obtenir la mida (en 64 bits màquina, l'exemple anterior proporciona 16 perquè és una matriu de dos car *);

amb "char ** A", sizeof (A) sempre retorna la mida d'un punter (en màquina de 64 bits, 8).


Resposta 3:
  1. char * A [] significa "una matriu de punters a caràcters", mentre que char ** A significa "un punter a un punter a un car." Tingueu en compte que el primer us diu explícitament que estem treballant amb una matriu, mentre que el segon no garanteix aquesta garantia. Tanmateix, per construcció, tots dos equivalen a C perquè una matriu s'emmagatzema com a punter al primer element d'aquesta matriu. Una matriu de punters és una instància especial d'un punter a un punter; un punter a un punter no és necessàriament una matriu de punters. Per demostrar-ho, tingueu en compte que, per a un arrp matriu punter, podeu assignar char ** A = (char **) (void *) arrp, però no podeu (és a dir, llança un error de compilador) char * A [] = ( char * []) ​​(void * []) ​​arrp; - de fet, no es pot instantar i matricar sense donar-li un argument de longitud i no es pot enviar a les matrius, només els apunts

Resposta 4:

El primer és un punter [1] al seu primer element (aka matriu), el segon pot ser el tipus de punter a una matriu de cadenes de caràcters [2], per exemple.

En altres paraules, les matrius decauran els indicadors i, per tant, només un sucre sintàctic (sempre que passin per alt les peticions d’assignació de mida en el cas de les matrius)

[1] A diferència d’int *, char * és un tipus de punter universal.

[1] les cadenes es passen per si mateixes com a matrius terminades nul·les.

Per a més exemples, vegeu

La resposta de Ken Gregg a Quan haig de definir els dobles indicadors a argv- al programa principal C com a argument?

La resposta de Sergey Zubkov a "Són possibles les matrius de matrius en C?

La resposta de John L. Miller a ¿Són possibles les matrius de matrius en C?