char *str1 = "bla";
char *str2 = "bla";
printf("%d", str1 == str2);
pq dá 1? como pode se tratar do mesmo endereço?
Explicações, por favor.
char *str1 = "bla";
char *str2 = "bla";
printf("%d", str1 == str2);
pq dá 1? como pode se tratar do mesmo endereço?
Explicações, por favor.
Posso estar falando besteira,
mas quando você faz *variavel, você está se referindo ao valor daquela posição de memória, portanto:
char *str1 = "bla";
char *str2 = "bla";
printf("%d", str1 == str2);
Retorna verdadeiro, dessa forma, imprimirá 1, por que *str1 == *str2, agora se quiser fazer referencia a posição de memória, deveria ser &variavel, não é isso?
[]'s
Estou no Windows, sem DevC++ :twisted:, não tenho como testar…
Poderia ser testado assim:
printf("%s",*str1)
printf("%s",*str2);
… os dois devem imprimir: “bla”, senão, falei besteira
falou!
Não sei bem em C, mas pesquisei aqui e entendi o seguinte…
0 = true
1 = false
entao como temos 2 variáveis e ponteiros para posições diferentes de memória retornará 1.
strcmp(str1, str2) é um função responsavel pela comparação retornando 0 são iguais, caso contrário são diferentes
1 = true
0 = false
não é diegohsi ?
verdadeiro e falso?
[]'s
não
caracas! hehe
[quote]Posso estar falando besteira,
mas quando você faz *variavel, você está se referindo ao valor daquela posição de memória… [/quote]
Quando faço:
char *str1 = "bla";
char *str2 = "bla";
Estou declarando e inicializando dois ponteiros para char.
Perdão, mas do jeito que eu entendi, isso não faz muito sentido.
Veja bem, na minha pergunta eu estou comparando dois ponteiros para char.
Se o código fosse:
Estaríamos comparando os char’s em si, o que também resultaria em 1, já que *str1 = *str2 = ‘b’.
[quote]printf("%s",*str1)
printf("%s",*str2);
[/quote]
Perdão novamente, mas isso nem sequer deve compilar…
Como dito antes, *str1 e *str2 são char’s, não cadeias de char’s.
imprimir verdadeiro, 1:
#include<stdio.h>
int main(){
char *str1 = "b";
char *str2 = "b";
printf("%c\n%c",*str1,*str2);
printf("%d", str1 == str2);
system("pause");
return 0;
}
imprimir falso, 0:
#include<stdio.h>
int main(){
char *str1 = "c";
char *str2 = "b";
printf("%c\n%c",*str1,*str2);
printf("%d", str1 == str2);
system("pause");
return 0;
}
Não sei se no java verdadeiro é falso, hehe
Mas aqui deu certo.
Exato, por isso peguei só o primeiro caracter! Caso contrario deveria-se declarar um vetor de caracteres!
[quote]Não sei bem em C, mas pesquisei aqui e entendi o seguinte…
0 = true
1 = false [/quote]
O amigo está enganado.
1 = true
0 = false
No caso, temos dois ponteiros para posições iguais, creio.
É exatamente aí que está a minha dúvida: como posso ter declarado e inicializado duas cadeias diferentes e elas apontarem pro mesmo lugar só por terem conteúdos iguais?
strcmp é uma função que compara conteúdos de duas cadeias, que não é o caso aqui, onde estamos comparando ponteiros.
boa…
Esse é do mestre!
Coordenador das olimpiadas de programação de Santos.
Sr. Ciro Cirne Trindade.
[]'s
Citando e comentando o código do amigo:
#include<stdio.h>
int main(){
char *str1 = "b";
char *str2 = "b";
printf("%c\n%c",*str1,*str2); // aqui ele compara os dois conteúdos, logo é natural imprimir 1, o que não tem absoulutamente nada a ver com a minha pergunta hehe
printf("%d", str1 == str2); // aqui ele compara os ponteiros, [b]perceba[/b], aqui está minha dúvida, vc declarou e inicializou duas cadeias de caracteres diferentes de conteúdos iguais, mas mesmo assim o programa retorna 1, mostrando que str1 e str2 ocupam posições de memória iguas. Como pode? =]
system("pause");
return 0;
}
Entendi, hehe
Mas é seis por meia duzia: str == *str, é isso?
Posições iguais no espaço? hehe
Não é contra a lei de um malandro ai?
kkkk
[quote=getAdicted]Entendi, hehe
Mas é seis por meia duzia: str == *str, é isso?
[/quote]
Não… Veja bem, str se refere a um ponteiro, uma posição de memória.
Enquanto *str se refere ao conteúdo referenciado por esse ponteiro, no caso do código supracitado, um char.
str e *str são duas coisas diferentes no nosso código.
Exatamente o que o programa dá a entender…
E a razão desse tópico.
Saber pq str1 e str2 tratam do mesma posiçõa de memória.
Valeu! Valeu!
bacana isso!