Ling. C - Qual é a diferença entre ponteiros com um asterisco e com vários? [Resolvido]

Olá,

eu gostaria de saber qual a diferença entre um ponteiro com apenas um asterisco com um com mais de um. Por exemplo:

[code]int main(int argc, char** argv) // dois asteriscos

int main(int argc, char* argv) // um asterisco[/code]

Obrigado.

Cada * aumenta um grau de “indirection”. Por exemplo, char *p é um ponteiro para char, char **p é um ponteiro para ponteiro para char, e assim por diante.

(Em particular, na declaração do método main, não se recomenda usar char **argv e sim const char *argv[], que representa melhor a intenção de termos um array de ponteiros para const char *. )

Dois asteriscos designam um ponteiro para um ponteiro.

Em C, sabemos que uma string é um array de caracteres, que pode ser declarado como char[] ou char*. A última forma é um ponteiro apontando para o primeiro caractere da string.

E se quisermos um array de strings? O array é um conjunto de char*. A variável que armazena o array de strings precisa apontar para o primeiro elemento do array, que é do tipo char*. Daí temos um ponteiro para um ponteiro, que é declarado da forma char**.

[quote=entanglement]Cada * aumenta um grau de “indirection”. Por exemplo, char *p é um ponteiro para char, char **p é um ponteiro para ponteiro para char, e assim por diante.

(Em particular, na declaração do método main, não se recomenda usar char **argv e sim const char *argv[], que representa melhor a intenção de termos um array de ponteiros para const char *. )
[/quote]

Entendi. Obrigado a todos pelas respostas.

entanglement, desculpe, postamos quase ao mesmo tempo e não tinha visto sua resposta.

Foi complementar. :wink: