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;
}
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;
}