Compartir a través de


Declaraciones de puntero

Una declaración de puntero identifica una variable de puntero y especifica el tipo del objeto al que señala la variable. Una variable declarada como puntero contiene una dirección de memoria.

Sintaxis

declarator:
pointeropt direct-declarator

direct-declarator:
identifier
( declarator )
direct-declarator [ constant-expressionopt ]
direct-declarator ( parameter-type-list )
direct-declarator ( identifier-listopt )

pointer:
* type-qualifier-listopt
*opttype-qualifier-list pointer

type-qualifier-list:
type-qualifier
type-qualifier-list type-qualifier

type-specifier proporciona el tipo del objeto, que puede ser un elemento básico, una estructura o un tipo de unión. Las variables de puntero también pueden señalar a funciones, matrices y otros punteros. (Para obtener información sobre la declaración y la interpretación de tipos de puntero más complejos, vea Interpretación de los declaradores más complejos).

Si crea type-specifier void, puede retrasar la especificación del tipo al que hace referencia el puntero. Un elemento de este tipo se conoce como "puntero a void " y se escribe como void *. Una variable declarada como un puntero a void se puede utilizar para señalar a un objeto de cualquier tipo. Sin embargo, para realizar operaciones en el puntero o en el objeto al que señala, el tipo al que señala debe especificarse explícitamente para cada operación. (Las variables de tipo char * y tipo void * son compatibles con la asignación sin una conversión de tipo). Esta conversión se puede realizar con una conversión de tipo. Para más información, vea Conversiones de tipos.

type-qualifier puede ser const o volatile , o ambos. Estas palabras clave especifican, respectivamente, que el propio programa no puede modificar el puntero (const), o que el puntero lo puede modificar de forma legítima algún proceso que supere el control del programa (volatile). Para obtener más información sobre const y volatile, consulte Calificadores de tipos.

Los nombres declarator identifican la variable y puede incluir un modificador de tipo. Por ejemplo, si declarator representa una matriz, el tipo de puntero se modifica para ser un puntero a una matriz.

Puede declarar un puntero a un tipo de estructura, de unión o de enumeración antes de definir el tipo de estructura, de unión o de enumeración. El puntero se declara utilizando la etiqueta de estructura o de unión tal como se muestra en los ejemplos. Se permiten dichas declaraciones porque el compilador no necesita conocer el tamaño de la estructura o de la unión para asignar espacio para la variable de puntero.

Ejemplos

En los ejemplos siguientes se muestran declaraciones de puntero.

char *message; /* Declares a pointer variable named message */

El puntero message señala a una variable con el tipo char.

int *pointers[10];  /* Declares an array of pointers */

La matriz pointers tiene 10 elementos; cada elemento es un puntero a una variable con el tipo int.

int (*pointer)[10]; /* Declares a pointer to an array of 10 elements */

La variable pointer señala a una matriz con 10 elementos. Cada elemento de esta matriz tiene el tipo int .

int const *x;      /* Declares a pointer variable, x,
                      to a constant value */

El puntero x se puede modificar para que señale a un valor int diferente, pero el valor al que señala no puede modificarse.

const int some_object = 5 ;
int other_object = 37;
int *const y = &fixed_object;
int volatile *const z = &some_object;
int *const volatile w = &some_object;

La variable y en estas declaraciones se declara como un puntero de constante a un valor int. El valor al que señala se puede modificar, pero el propio puntero debe señalar siempre a la misma ubicación: la dirección de fixed_object. De igual forma, z es un puntero de constante, pero también se declara para que señale a un elemento int cuyo valor no lo pueda modificar el programa. El especificador volatile indica que, aunque el valor de const int al que z señala no lo puede modificar el programa, podría modificarlo de forma legítima un proceso ejecutado simultáneamente con el programa. La declaración de w especifica que el programa no puede cambiar el valor al que se señala y que el programa no puede modificar el puntero.

struct list *next, *previous; /* Uses the tag for list */

En este ejemplo se declaran dos variables de puntero (next y previous) que señalan al tipo de estructura list. Esta declaración puede aparecer antes que la definición del tipo de estructura list (vea el ejemplo siguiente), mientras que la definición de tipo list tiene la misma visibilidad que la declaración.

struct list
{
    char *token;
    int count;
    struct list *next;
} line;

La variable line tiene el tipo de estructura denominado list. El tipo de estructura list tiene tres miembros: el primer miembro es un puntero a un valor char, el segundo es un valor int y el tercero es un puntero a otra estructura list.

struct id
{
    unsigned int id_no;
    struct name *pname;
} record;

La variable record tiene el tipo de estructura id. pname se declara como un puntero a otro tipo de estructura denominado name. Esta declaración puede aparecer antes de que se defina el tipo name.

Vea también

Declaradores y declaraciones de variables