Estruturas (struct) Estruturas de Dados Marco Antonio Montebello Júnior [email protected] Estruturas É uma coleção de variáveis referenciadas por um nome Podemos armazenar as coordenadas (x,y) de um ponto Estrutura de Dados Estruturas A palavra struct informa ao compilador que um modelo de estrutura está sendo definido. Declaração: struct coordenadas { int iX; int iY; }; A estrutura contém 2 variáveis do tipo int, e é chamada de coordenadas Estrutura de Dados Declaração struct identificador { tipo1 nome1; tipo2 nome2; ... tipoN nomeN; } var_struct; Pode conter um número arbitrário de dados de tipos diferentes Pode-se nomear a estrutura para referencia-la O identificador ou var_struct podem ser omitidos mas não ambos Estrutura de Dados Nomeando uma Estrutura Caso1: struct { int int }; struct coordenadas iX; iY; coordenadas coord1, coord1; Caso2: struct { int iX; int iY; } coord1, coord2; Estrutura de Dados Acessar os dados de uma Estrutura Acesso aos dados: var_struct.campo //Atribuições coord1.iX = 10; coord1.iY = 50; coord2.iX = 15; coord2.iY = 25; Estrutura de Dados Operações com Estruturas Inicializando uma estrutura: struct coordenadas coord1 = {15, 38}; Atribuição entre estruturas do mesmo tipo: struct coordenadas coord1 = {15, 38}; struct coordenadas coord2; coord2 = coord1 //coord2.iX = coord1.iX e coord2.iY = coord1.iY; Os campos correspondentes das estruturas são automaticamente da origem para o destino Estrutura de Dados Atribuição entre Estruturas Atenção!!! Quando a estrutura possuir ponteiros: struct Times { char *cNome; int iIdade; } tim1, tim2; tim1.cNome = “Timão”; tim1.iIdade = 96; tim2 = tim1; tim1 e tim2, apontam tim1.cNome == tim2.cNome == “Timão” Estrutura de Dados Estruturas como Parâmetros de Retorno struct coordenadas coord (int iV1, int iV2) { struct coordenadas tmp; tmp.iX = iV1; tmp.iY = iV2; return (tmp); } main() { struct coordenadas ret; ret = coord(31, 23); } Estrutura de Dados Passando Estruturas como Parâmetros int iResult(struct coordenadas coord1) { int iSoma; iSoma = coord1.iX + coord1.iY; return(iSoma); } main() { int iRet; struct coordenadas temp; temp.iX = 31; temp.iY = 3; iRet = iResult(temp); //iRet = 34 } Estrutura de Dados Passando Ponteiros de Estruturas com Parâmetros void Pontos(struct coordenadas *coord) { coord->iX = 19; coord->iY = 85; } main() { struct coordenadas Param; Pontos(&Param); //X = 19 – Y = 85 printf(“X = %i - Y = %i”, Param.iX, Param.iY); } Estrutura de Dados Acesso ao Ponteiro O acesso ao ponteiro da estrutura é feito através do operador: -> Estrutura de Dados