Vejo que isso funfa:
char *str1 = "bla";
char str2[] = "bla";
char str3[] = {'b', 'l', 'a', '\0'};
Então pq isso não funfa tb?
Ele acusa “Initialization makes pointer from integer without a cast”
Alguém poderia me explicar?
Vejo que isso funfa:
char *str1 = "bla";
char str2[] = "bla";
char str3[] = {'b', 'l', 'a', '\0'};
Então pq isso não funfa tb?
Ele acusa “Initialization makes pointer from integer without a cast”
Alguém poderia me explicar?
Apesar de arrays e ponteiros serem quase a “mesma coisa”, você não consegue usar a sintaxe de inicialização de arrays {v1, v2, v3, …, vn} e atribuir seu retorno para um ponteiro. Entenda que apesar de um array “ser” um ponteiro, ainda assim o array tem um tamanho. O ponteiro do array aponta apenas para a primeira posição do array. Perceba que um array sempre tem um ponteiro que aponta para a primeira posição (o identificador), entretanto um ponteiro nem sempre aponta para o início de um array.
Entendeu o raciocínio?
[]'s
Completando o que o davidbuzatto explicou… PONTEIRO é um CONTROLE REMOTO UNIVERSAL.
char str = {'b', 'l', 'a', '\0'}; // vetor char de tamanho [4]
char *p; // CONTROLE REMOTO UNIVERSAL para char
p = str; // configura o CONTROLE REMOTO UNIVERSAL para a posção [0] do vetor
// é o mesmo que...
p = &str[0];
[quote=davidbuzatto]Apesar de arrays e ponteiros serem quase a “mesma coisa”, você não consegue usar a sintaxe de inicialização de arrays {v1, v2, v3, …, vn} e atribuir seu retorno para um ponteiro. Entenda que apesar de um array “ser” um ponteiro, ainda assim o array tem um tamanho. O ponteiro do array aponta apenas para a primeira posição do array. Perceba que um array sempre tem um ponteiro que aponta para a primeira posição (o identificador), entretanto um ponteiro nem sempre aponta para o início de um array.
[/quote]
Oi david! Agradeço a explicação! Mas veja só:
“bla” não é um array? Qual é o ponteiro identificador de “bla”, visto que str é mutável?
Pois é! Mas você não está inicializando o ponteiro como um “array”, mas sim usando o literal para string.
Realmente é estranho, concordo com você, mas essa deve ser a convenção do compilador.
Provalemente isso deve estar descrito na especificação da linguagem C.
[]'s
[quote=cake][quote=davidbuzatto]Apesar de arrays e ponteiros serem quase a “mesma coisa”, você não consegue usar a sintaxe de inicialização de arrays {v1, v2, v3, …, vn} e atribuir seu retorno para um ponteiro. Entenda que apesar de um array “ser” um ponteiro, ainda assim o array tem um tamanho. O ponteiro do array aponta apenas para a primeira posição do array. Perceba que um array sempre tem um ponteiro que aponta para a primeira posição (o identificador), entretanto um ponteiro nem sempre aponta para o início de um array.
[/quote]
Oi david! Agradeço a explicação! Mas veja só:
“bla” não é um array? Qual é o ponteiro identificador de “bla”, visto que str é mutável?
[/quote]
se você quer saber onde foi colocado a primeira posição de “bla” (no caso b) você pode pegar a referência da posição.
int pos = &str;
Note que, como você não “incrementou” o apontador ele aponta para primeira posição(‘b’);
caso você incremente *str++ você passa a segunda posição
dá uma lida nesse artigo. seção 2;