sábado, 31 de janeiro de 2015

Struct - atribuindo e alterando valor

Declarei uma variável ponteiro para ponteiro do tipo char de nome char **p_t;
como membro da estrutura "ssss".
Também declarei na função principal duas estruturas xxxx e yyyy.
Colhemos do teclado uma frase e guardamos na variável char *str;
Note que scanf(); trabalha com a entrada formatada impedindo que passe acima de 11 caracteres
contando com o espaço.
O membro ponteiro para ponteiro **p_t; de ssss está recebendo o endereço de memória
da vaviável que aponta para ela.
Quando copiamos a estrutura xxxx em yyyy, o valor do membro ponteiro para ponteiro
em xxxx também é copiado para o membro de yyyy.
Sendo assim, os membros apontarão para o mesmo endereço de memória, e para a mesma variável.
A prova disto é que se alterarmos o valor que aponta pelo membro de uma das duas estruturas.
elas passarão a receber o mesmo valor, o que foi alterado.

Veja abaixo imagens do programa em execução:



Veja abaixo o código do programa:

#include<stdio.h>
#include<conio.h>
struct ssss{
    char **p_t;
};
void Janela5(){
    int lin, col;textattr ( 3 );
    for ( lin = 0; lin <= 25; lin++ ){
        for ( col = 0; col <= 80; col++ ){
            gotoxy( col, lin );
            if ( lin == 2 ){textattr ( 3 );printf( " ");}
            if ( col == 1 ){textattr ( 3 );printf(" ");}
            if ( col == 80 ){textattr ( 3 );printf(" ");}
        }
    }
}
int continuando ( ){
    system ("title STRUCT - ATRIBUINDO E ALTERANDO VALOR");
    int nr; do{system("cls");system("Color 20");Janela5();
    textcolor(LIGHTRED);gotoxy(25,3);printf("STRUCT - ATRIBUINDO E ALTERANDO VALOR");
    textcolor(BROWN);gotoxy(25,7);printf("Programa desenvolvido por:");
    textcolor(WHITE);gotoxy(52,7);printf("Samuel Lima");
    textcolor(BLUE);gotoxy(34,9);printf("sa_sp10@hotmail.com");
    textcolor(LIGHTBLUE);gotoxy(23,11);printf ("Digite ");
    textcolor(LIGHTRED);printf (" 0 ");
    textcolor(LIGHTBLUE);printf (" para sair ou ");
    textcolor(LIGHTRED);printf (" 1 ");
    textcolor(LIGHTBLUE);printf (" para continuar ");
    textcolor(LIGHTRED);gotoxy(24,13);
    scanf ( "%d", &nr );fflush(stdin);
    if( nr == 0 ){
        textcolor(LIGHTRED);gotoxy(36,18);printf("MUITO OBRIGADO");
        getche();exit(0);
    }
    else if( nr == 1 ){
        return 1;
    }
    textcolor(YELLOW);gotoxy(36,16);printf ("\aopcão errada!");
    getche();
    }while ( 1 );
    return 1;
}
int main(){
    char *str;
    struct ssss xxxx, yyyy;
    continuando ( );system("cls");system("Color 90");Janela5();
    textcolor(LIGHTRED);gotoxy(25,3);printf("STRUCT - ATRIBUINDO E ALTERANDO VALOR");
    textcolor(LIGHTBLUE);gotoxy(23,5);printf("Digite uma frase: ");
    str = ( char* ) malloc ( 10 );gotoxy(23,7);textcolor(YELLOW);
    scanf ("%11[^\n]s",str);fflush(stdin);
    xxxx . p_t = &str;
    textcolor(LIGHTBLUE);gotoxy(23,9);printf("Frase digitada: ");
    textcolor(YELLOW);printf("%s", *xxxx.p_t);
    getche();
    yyyy = xxxx;
    strcpy( *yyyy.p_t, "Programador C/C++");
    textcolor(LIGHTBLUE);gotoxy(17,13);
    printf("Valor apontado por struct ");
    textcolor(LIGHTRED);printf("yyyy ");
    textcolor(YELLOW);printf("%s", *yyyy.p_t );
    textcolor(LIGHTBLUE);gotoxy(17,15);
    printf("Valor apontado por struct ");
    textcolor(LIGHTRED);printf("xxxx ");
    textcolor(YELLOW);printf("%s", *xxxx.p_t );
    Sleep(1000);
    textcolor(LIGHTRED);gotoxy(35,23);
    printf("MUITO OBRIGADO");
    getche();
    return 0;
}

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.