// programa de // carros em struct (Routo Terada 1999) // com Troca de pointers #include // a seguir typedef global typedef struct car{ // typedef aqui com nome car char *Modelo; int Preco; // preco atual de mercado, em reais struct car *pseguinte; // aponta para carro seguinte } CARRO; // aqui vai nome do tipo que e' CARRO void Impr(CARRO *p1){ // p1 e' pointer p/ carro // imprime os valores de um objeto carro printf("Dentro de Impr, Modelo do carro: %s \n", p1->Modelo); printf("Idem, Preco: %d \n", p1->Preco); } void Troca(CARRO **p1, CARRO **p2){ // p1 contem ender de pointer p/ carro // *p1 e' pointer p/ carro // **p1 e' ender de carro // // p1 *p1=pcar1 **p1 (variaveis) // ------ ------ ------ //| o--------> o----------> carro // ------ ------ ------ // // p1==&pcar1 // CARRO *ptemp; // troca os dois carros entre si printf(" Dentro de Troca, Modelo primeiro carro: %s \n", (*p1)->Modelo); printf(" Idem, Preco: %d \n", (*p1)->Preco); ptemp=*p1; // *p1 e' pointer p/ carro *p1=*p2; *p2=ptemp; } // fim Troca void main(){ CARRO carroA, carroB; CARRO *pcar1, *pcar2; // 2 apontadores para carro printf("\n INICIO DE EXEC.\n"); carroA.Modelo="Astra A"; carroA.Preco=999; pcar1=&carroA; carroB.Modelo="Astra B"; carroB.Preco=888; pcar2=&carroB; Troca(&pcar1, &pcar2); Impr(pcar1); // &pcar e' ender de pointer p/ carro Troca(&pcar1, &pcar2); Impr(pcar1); // INICIO DE EXEC. // Dentro de Troca, Modelo primeiro carro: Astra A // Idem, Preco: 999 //Dentro de Impr, Modelo do carro: Astra B //Idem, Preco: 888 // Dentro de Troca, Modelo primeiro carro: Astra B // Idem, Preco: 888 //Dentro de Impr, Modelo do carro: Astra A //Idem, Preco: 999 } // fim main