C múltiples declaraciones de una sola línea

3 minutos de lectura

avatar de usuario
codificadorrural

¿Qué sucede cuando declaro varias variables en una sola línea? p.ej

int x, y, z;

Todos son enteros. La pregunta es ¿qué son y y z en el siguiente enunciado?

int* x, y, z;

¿Son todos punteros int?

  • Pregunta editada, ya que no tiene nada que ver con Objective C

    – Nikolái Ruhe

    14 de julio de 2010 a las 14:17

  • Sé que hay un duplicado de esta pregunta en algún lugar aquí (definitivamente lo he leído antes)

    – Mark Elliot

    14 de julio de 2010 a las 14:48

Solamente x es un puntero a int; y y z son enteros regulares.

Este es un aspecto de la sintaxis de declaración de C que hace tropezar a algunas personas. C usa el concepto de declaranteque introduce el nombre de la cosa declarada junto con información de tipo adicional no proporcionada por el especificador de tipo. en la declaracion

int* x, y, z;

los declarantes son *x, yy z (es un accidente de la sintaxis C que puede escribir int* x o int *x, y esta pregunta es una de varias razones por las que recomiendo usar el segundo estilo). La intuición de x, yy z está especificado por el especificador de tipo intmientras que la puntería de x es especificado por el declarante *x (IOW, la expresión *x tiene tipo int).

Si desea que los tres objetos sean punteros, tiene dos opciones. Puede declararlos como punteros explícitamente:

int *x, *y, *z;

o puede crear un typedef para un puntero int:

typedef int *iptr;
iptr x, y, z;

Solo recuerda que al declarar un puntero, el * es parte del nombre de la variable, no del tipo.

  • Verdaderamente una respuesta completa y a la pregunta subyacente de si * es para el tipo o la variable.

    – codificador rural

    14 de julio de 2010 a las 14:58

En tu primera oración:

int x, y, z;

Ellos son todos ints.

Sin embargo, en el segundo:

int* x, y, z;

Solamente x es un puntero a int. y y z son simples ints.

Si desea que todos sean indicadores de ints tienes que hacer:

int *x, *y, *z;

  • Esta es una de las razones por las que el espaciado int* foo; está realmente equivocado. En el ejemplo de esta pregunta, parece que las 3 variables son todas del tipo “int*“. Yo diría que este espacio es casi tan ofensivo como a+b * c.

    – R.. GitHub DEJA DE AYUDAR A ICE

    14 de julio de 2010 a las 14:59

Solo x es un puntero int. Y y Z serán simplemente int. Si quieres tres consejos:

int * x, * y, * z;

Es importante saber que, en C, la declaración imita el uso. El operador unario * es asociativo por la derecha en C. Entonces, por ejemplo en int *x x es del tipo apuntador a un int (o int-star) y en int xx es de tipo int.

Como otros también han mencionado, en int* x, y, z; el compilador de C declara x como un int-star e, y y z como enteros.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad