*argv[] Linguagem C


alguém pode me explicar esse *argv[]?
ponteiro pra matriz?
não consigo entender...

alguém pode me explicar esse *argv[]?
ponteiro pra matriz?
não consigo entender…

Uma das formas de declararmos uma string em c é como um ponteiro de caracteres:

Então o código char *argv[] nada mais é do que um array de strings.

int main(int argc, char *argv[])  

Nesse trecho, voce esta definindo que seu método main pode receber por parametros os argumentos declarados dentro dele.

quando voce declara char *argv[], esta definido um ponteiro de vetor do tipo char, é ai que ele conta em bytes o que vai armazenar na memória para seu vetor, sempre iniciando na posição zero(0).

Espero ter ajudado, não sou muito bom explicando. Flw.

Na verdade não é um ponteiro de vetor, e sim, um vetor de ponteiros :wink:

Só para comentar. Esses parâmetros servem para você usar a linha de comando.

Se alguém rodar sua aplicação assim:

suaAplicacao Vinicius 1 2 3

O parâmetro argc vai receber o valor 4, indicando que 4 parâmetros foram passados pela linha de comando.

O vetor argv vai ser preenchido com:

argv[0]: C:\SeuDiretorio\suaAplicacao.exe --> Aqui sempre vai o caminho da sua aplicação
argv[1]: Vinicius
argv[2]: 1
argv[3]: 2
argv[4]: 3

Todos esses parâmetros do tipo char*. Por isso argv é um array de char*

Na verdade não é um ponteiro de vetor, e sim, um vetor de ponteiros :wink: [/quote]

Isso porque em C vale a regra "dados dois operadores, um que vem à esquerda (pré-fixo) e outro que vem à direita (pós-fixo), o que tem maior precedência é o da direita.

Então char argv[] é um array ([]) de ponteiros () para char.

argv[0]: 0xblablabla --> essa região de memória contém --> C:\SeuDiretorio\suaAplicacao.exe --> Aqui sempre vai o caminho da sua aplicação
argv[1]: 0xblebleble --> essa região de memória contém --> Vinicius
argv[2]: 0xbliblibli --> essa região de memória contém --> 1
argv[3]: 0xblobloblo --> essa região de memória contém --> 2
argv[4]: 0xblublublu --> essa região de memória contém --> 3

Certo?

Certo. Porém, o C usa char* na forma de strings de maneira mais ou menos transparente, por isso não entrei no detalhe de realmente ser o ponteiro para o primeiro char de uma sequencia terminada por \0.