¿Qué significan los paréntesis en una declaración de variable C?

2 minutos de lectura

¿Que significan los parentesis en una declaracion de variable C
Andrés

puede alguien explicarme que significa esto?

int (*data[2])[2];

¿Que significan los parentesis en una declaracion de variable C
Brian R. Bondy

¿Para qué sirven los paréntesis?

En paréntesis C [] tener una precedencia mayor que el asterisco *

Buena explicación de Wikipedia:

Para declarar una variable como un puntero a una matriz, debemos usar paréntesis. Esto se debe a que entre corchetes C ([]) tienen mayor precedencia que el asterisco

double (*elephant)[20];

. Entonces, si deseamos declarar un puntero a una matriz, debemos proporcionar paréntesis para anular esto:

Esto declara que elefante es un puntero, y el tipo al que apunta es una matriz de 20 valores dobles.

int *(*crocodile)[15];

Para declarar un puntero a una matriz de punteros, simplemente combine las notaciones.Fuente

.

int (*data[2])[5];

Y tu caso real:

data es una matriz de 2 elementos. Cada elemento contiene un puntero a una matriz de 5 enteros.

int (*data[2])[5];
int x1[5];
data[0] = &x1;
data[1] = &x1;

data[2] = &x1;//<--- out of bounds, crash data has no 3rd element
int y1[10];
data[0] = &y1;//<--- compiling error, each element of data must point to an int[5] not an int[10]

  • Entonces, podría tener un código usando su tipo de ‘datos’:

    ¡Respuesta perfecta!

    – J3STER

31 de enero de 2017 a las 3:35

  • Hay un programa muy interesante llamado “cdecl” que puede descargar para Linux/Unix y probablemente también para Windows. Usted pega una declaración de variable C (o C++ si usa c++decl) y lo explica en palabras simples.

    Con un nombre como @sixlettervariables, asumo que eres aún más de la vieja escuela que yo. Por favor, dime que recuerdas los mandamientos de Henry Spencer.

    –Paul Tomblin

  • 2 de octubre de 2009 a las 18:06 Es un sitio web que puedes usar ahora:

    cdecl.org

    – Pro Q

11 de noviembre de 2021 a las 7:00 Si sabes leer expresiones

en C, entonces está a un paso de leer declaraciones complicadas.

char *p;

Que hace *p ¿realmente quiso decir? Esto significa que

int (*data[2])[5];

es un char. Que hace (*data[x])[y] ¿significar? Esto significa que data es un int (siempre que 0 <= x < 2 y 0 <= y < 5). Ahora, solo piensa en cuáles son las implicaciones de eso.

tiene que ser… una matriz de 2… punteros… a matrices de 5… enteros.

¿No crees que es bastante elegante? Todo lo que estás haciendo es indicar el tipo de una expresión. Una vez que entiendas eso, ¡las declaraciones nunca más te intimidarán!

La “regla rápida” es comenzar con el nombre de la variable, escanear hacia la derecha hasta que presione un ), volver al nombre de la variable y escanear hacia la izquierda hasta que presione un (. Luego “salir” del par de paréntesis y repita el proceso.

void **(*(*weird)[6])(char, int);

weird Apliquémoslo a algo ridículo:

es un puntero a una matriz de 6 punteros a funciones, cada uno de los cuales acepta un char y un int como argumento, y cada uno devuelve un puntero a un puntero a void. Ahora que ya sabes qué es y cómo se hace… no

typedef void **(*sillyFunction)(char, int);

sillyFunction (*weird)[6];

  • hazlo. Use typedefs para dividir sus declaraciones en partes más manejables. P.ej using Y hoy en día, utiliza

    para asignar un nombre a un tipo.

    – IS4

  • 2 de diciembre de 2017 a las 0:27

    Y hoy en día, usa C++ 😛

    – IS4

03/12/2017 a las 21:50[2] datos

– una matriz de dos enteros[2] *datos

– un puntero a una matriz de dos enteros[2](*datos

) – “[2](*datos[2] )

1647534968 374 ¿Que significan los parentesis en una declaracion de variable C
– una matriz de 2 punteros a matrices de dos enteros.

ResumenDonut

int myArray[5];
int * myArrayPtr = myArray;

Si tienes una matriz: myArray Sería perfectamente razonable. intsin los corchetes es un puntero a un myArray. Cuando agregas los corchetes es como si hicieras referencia al puntero

myArrayPtr[1] = 3;

. Podrías escribir…

¿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