Aula 19: Definindo novos tipos e estruturas |
typedef descrição nomedotipo; |
com nomedotipo o nome que queremos dar ao novo tipo e decrição qualquer um dos tipos de variável que aprendemos até agora, incluindo arrays, ponteiros e todos os tipos de variável simples.
Exemplos:
typedef float real;
Isto pode ser útil para pessoas que estão
acostumadas a programar em PASCAL. Após se escrever a linha de cima,
podemos usar variáveis do tipo real, exactamente como em PASCAL.
Variáveis do 'tipo' real serão traduzidas pelo compilador
em variáveis do tipo float.
typedef float floatarray[10];
Define um novo tipo de variável. O novo
tipo é chamado floatarray e uma variável deste tipo será
igual a um array de 10 floats.
De notar que a definição de um novo tipo não
cria uma variável! Não reserva espaço em memória
e não atribui um nome a uma variável. É apenas uma
descrição
de um tipo que será depois utilizado para declarar uma variável.
nomedotipo nomevar; |
com nomevar o nome da nova variável e nomedotipo o tipo dessa variável, como foi descrito antes. Depois da declaração, podemos utilizar a variável tal como se tivesse sido declarada da forma normal.
Exemplos:
depois da declaração do novo tipo typedef
float real; podemos usar
real x;
Isto já se parece mais com PASCAL (em
PASCAL seria "Var x: real")
floatarray ra;
E no código podemos utilizar este array:
ra[1] = 2.68;
Isto é equivalente a
float ra[10];
ra[1] = 2.68;
/* definig a new type of variable: */
typedef int ra[6];
/* declare two global variables: */
ra x;
int y[7];
int AreEqual(ra r)
/* Note that the definition can also
be used for parameters */
{
if (r[0]==r[1])
return(1);
else
return(0);
}
void main()
{
x[1] = 1;
x[2] = 0;
if AreEqual(x)
printf("First two elements
are equal");
else
printf("First two elements
are different");
y[1] = 1;
y[2] = 0;
/* The following instruction
is bad code, because the type of value we pass to
the function
is different than the type of value the function expects: *\
AreEqual(y);
}
typedef struct {
hour, minute, second: integer;
} time;
void showtime(time t);
/* Will show the time in format h:m:s
*/
{
printf("%d:%d.%d\n", t.hour, t.minute,
t.second);
}
void main()
{
time atime;
atime.hour = 23;
atime.minute = 16;
atime.second = 9;
showtime(atime);
}
typedef struct {
int day, month, year; } date; typedef struct {
typedef struct {
dateandtime x; x.dattime.hour = 1; x é uma variável do tipo dateandtime que é uma estrutura que contém dois campos. Um campo é dattime que é do tipo time. O outro campo é do tipo date. Um dos campos da estrutura time é hour que é um int. |