Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

PernaL0nga

Uso do caractere '*'

Recommended Posts

Fala pessoal!

Uma dúvida que tenho é sobre o uso do '*', por que ele é usado com chars, strings etc..

Exemplos:

char* strncat(char* str1, const char* str2, size_t qtde);[...]*Str1++ = *Str2++;

Detalhe para: *Str1++ = *Str2++, esse trecho eu achei em um código na internet, sendo que essas duas variáveis sejam do tipo char, parece que elas são igualadas e somadas como se fossem inteiros http://forum.imasters.com.br/public/style_emoticons/default/upset.gif , o que significa isso?

 

 

Valeu, té mais http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

*Str1 significa "valor apontado por Str1". Assim, estamos copiando o valor apontado por Str2 em Str1 assim:*Str1 = *Str2Esse "++" é um "side effect", uma forma de compactar o código. Somar ponteiros com inteiros faz com que eles apontem para o próximo valor do array;Imagine que as posições da memória estão assim:1234: 'H'1235: 'D'1236: 'K'Se temos um ponteiro apontado para o endereço 1234, por exemplo:char* Str1;Str1 = 1234;Então *Str1 == 'H', certo?Agora, efetuamos o incremento de Str1:Str1++; // Equivalente a Str1 += 1;E Str1 agora tem valor 1235, e *Str1 == 'D'.A linha:*Str1++ = *Str2++;É equivalente a:*Str1 = *Str2;Str1++;Str2++;Ou seja, ele pega o conteúdo apontado por Str2 e joga para a posição de memória apontada por Str1, depois incrementa estes dois ponteiros (faz com que cada um deles aponte para a posição seguinte). Vale lembrar que o strncat copia a string str2 no final de str1, portanto, modifica apenas str1, e por isso tem o qualificador "const" no segundo argumento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo foi mal, agora que me toquei desse detalhe, para que serve o '*' no começo da função?

exemplo:

char *strinsert(char* Str1, const char* Str2){}

 

E o engraçado que '++' está funcionando diferentemente de +1, nessa minha função:

char *Insert(char *pcS){	char *p = pcS-5;	return p;}
Porquê?

 

Desde já obrigado =]

Compartilhar este post


Link para o post
Compartilhar em outros sites

??? Não entendi... Para mim parece que você cria um ponteiro tipo char e aponta ele para 5 posições anteriores de pcS, retornando esse ponteiro. Seria o mesmo que simplesmente usar pcS-5.O * no começo da função indica que ela irá retornar um ponteiro para char.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala cara!, valeu aí.

Olha o meu problema sobre a diferença que está dando entre '++' e '+1' que pra mim seria a mesma coisa, só que retorna valores diferentes:

 

#include <cstdlib>#include <iostream>#include <stdio.h>using namespace std;char *Insert(char *pcS, char *pcI, int iPos, char *pcT)	char *p = pcS++; //char *p = pcS+1;	return p;}int main(){	char szS[21] = "0125", szT[21];	printf("%s \n", szS);	printf("%s \n", Insert(szS, "34", 3, szT));	system("PAUSE");	return EXIT_SUCCESS;}
Olha só, usando char *p = pcS++; o programa retorna:

0125

0125

 

Já usando char *p = pcS+1; o programa retorna:

0125

125

 

Por quê?

 

E ainda não entendi o uso do * no começo da função, em quais casos devo usá-lo? e por que tirando o * dessa função ela não funciona?

 

Valeu por tudo aí

Compartilhar este post


Link para o post
Compartilhar em outros sites

A linhachar *p = pcS++;é equivalente achar *p = pcS;pcS++;O side effect ocorre depois.E quanto ao caracter * no começo, significa que a função retorna um ponteiro para um array de char, e não um char, pois se fosse assim, ele retornaria 1 (UM) único caracter, e ainda por cima, por valor, não por referência.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum.. Valeu, mas então, o char *Insert aponta pra qual array?pcS? pq é o array que o 'p' aponta é o 'p' que é retornado na função, é isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.