Ir ao conteúdo
  • Cadastre-se

Duvida com Ponteiros


fbenhur

Posts recomendados

Pessoal Bom Dia.

Estou iniciando em C e estou com uma duvida sobre ponteiros no seguinte código:


#include <stdio.h>
#include <string.h>

int main(){

char str_a[20];
char *pointer;
char *pointer2;

strcpy(str_a, "Hello, World!\n");
pointer = str_a;
printf(pointer);

pointer2 = pointer + 2;
printf(pointer2);
strcpy(pointer2, "y you guys!\n");
printf(pointer);

}

O Resultado do código é :

Hello, World!

llo,World!

Hey you guys!

A minha duvida é na ultima impressão de pointer. Atrvés do strcpy, ele irá copiar "Hello, World!\n" para str_a e depois irá imprimir "Hello...."

Após ele apontara pointer2, para pointer +2 e imprimirá "llo, World!". Em seguida ele ira copiar "y you guys!\n" para pointer2. Até aqui eu entendi.

Não estou entendendo é porque pointer virou "Hey you guys". Eu entendi que a parte "He" veio de pointer2(pointer +2). Pointer2 não teria que ser "Hey you guys!"? Não entendi porque está em pointer.

Se alguem puder me ajudar , agradeço.

Link para o comentário
Compartilhar em outros sites

Porque você se deslocou 2 posições em pointer2 e deixou para trás "He", que AINDA está sendo apontado por pointer.

Depois você aplica STRCPY em pointer2 que sobrescreve tudo após o "He", MAS manda imprimir a partir de POINTER e não de POINTER2.

Logo pointer enxergar o "He" + a nova sequência.

Entenda que os ponteiros apenas indexam o array, desenhe o array em um papel e use os ponteiros para indicar os índices atuais, você vai enxergar perfeitamente.

ponter2 foi usado para ler o array no index[2] e pointer para ler no [0].

Boa sorte.

Link para o comentário
Compartilhar em outros sites

Muito obrigado cara. Realmente não tinha entendido...

Agora entendi... Pointer2 estava apontando para depois de "HE" e quando ele substituiu alterou str_a. Pois como você disse os ponteiros estavam apenas indexando o array. Eu não havia entendi esta parte, do porque o Hello Word mudar Hey you guys.

Muito obrigado, como nunca programei em linguagens que utilizam ponteiros estou quebrando um pouco a cabeça nesta parte.

Valeu pela força!!!!

Link para o comentário
Compartilhar em outros sites

No começo, a variável array str_a armazena a string F5Rua4D.gif:


"Hello, World!\n"

A variável ponteiro pointer aponta para essa string na memória. Por isso, primeiramente ela que é passada à função de exibição.

Depois disso, devido a uma operação aritmética de endereços, pointer2 aponta para a mesma string, mas começando do terceiro caractere. Então, o que é enviado para exibição depois é apenas GbhmuXl.gif:


"llo, World!\n"

Na memória, antes dessa string está a string "He", pois nada foi alterado na string inicial. O que foi mudado foi apenas a maneira de acessá-la.

Em seguida, a função strcpy copia a string "y you guys!\n" para o endereço em pointer2. Isso faz com que haja uma real mudança na memória, ou seja, isto, que é apontado por pointer2:


"llo, World!\n"

Torna-se isto F5Rua4D.gif:


"y you guys!\n"

Encaixando essa nova string com o "He" que ficou na memória, resulta o que foi enviado à exibição por último:


"Hey you guys!\n"

Espero ter ajudado GbhmuXl.gif.

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...