tipo identificador1 [, identificador2 ...];
La definición de una variable se realiza indicando el tipo de la variable, a continuación el identificador y finalmente un punto y coma.
Las variables se pueden definir en muchos lugares: fuera de cualquier función, dentro de una función tanto al inicio como cuando se abre un bloque interno al abrir llaves. También se pueden considerar variables los parámetros de las funciones, con la única diferencia que se inicializan al realizar la llamada a la función. En C99 es posible definir variables locales a una función en casi cualquier lugar.
El lenguaje C posee gran variedad de tipos básicos de datos para definir variables. Además es posible definir variables de tipos de datos construidos o bien definir variables con nuevos tipos de datos.
El nombre del tipo de una variable en C no tiene que ser un identificador, puede estar formado por varios identificadores, palabras reservadas o modificadores que definen completamente el tipo. Ejemplo: 'struct Nodo *', 'const char *' , 'int **', etc. Hay que hacer notar que los modificadores como '*' y '[]' en la definición de variables sólo se atribuyen al identificador donde se aplica.
char * s, c; /* Define s de tipo 'char *' y c de tipo 'char' */
Las variables, vectores y estructuras pueden inicializarse a la vez que se definen. La inicialización se produce una única vez, cuando la variable comienza su existencia.
struct Nombre_estructura { Tipo1 campo1; Tipo2 campo2; ... TipoN campoN; }; struct Nombre_estructura variable={.campo2=Valor2, .campoN=ValorN};
En la función main se inicializan a la vez que se definen diferentes tipos de variables.
#include <stdio.h> struct infoPersonal{ long dni; char nombre[30]; }; int cuadradoSumaVector(int v[20],int n) { int i,s; for(i=0, s=0;i<n;i++) s+=v[i]; int cs=s*s; /* Con C99 es posible definir cs aquí */ return cs; } int main(){ unsigned int i=200; /* Se define una variable i de tipo "unsigned int" */ int size = i/10; /* Se calcula e inicializa cada vez que se entra en el bloque */ char c[]={'a',' ','d','z'}; /* Implícitamente c toma el tamaño 4 */ char *Lista[3]={"Uno","Dos","Tres"}; /* Se toman las direcciones de los literales */ char diasemana1[6]={'l','u','n','e','s','\0'}; char diasemana2[7]="martes"; /* Se copian los caracteres del literal */ int v[10]={1,2,3,4,5,-1,-2,-3,-4,-5}; int M[2][2]={{1,2},{3,4}}; struct infoPersonal ip1={42000000,"Don nadie"}; struct infoPersonal ip2={.dni=45000000, .nombre="Don alguien"}; printf("El cuadrado de la suma de los elementos de v es %d\n", cuadradoSumaVector(v,10)); return 0; }