es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál es la diferencia entre declarar un arreglo en C de la siguiente forma: int a[n] y int a?

Estaba intentando hacer un envío de matriz RPC del cliente al servidor… y alguien que no recuerdo puso su archivo .x con un “array” ¿? declarado de esta manera: int X <100>; dentro de una estructura del archivo .x… esta es la estructura que creó:

struct X_array{
int X <100>;
int X_size;
}

Lo curioso es que en su código de cliente tiene algo así: (lo resumiré un poco)

printf(“Dame el tamaño”);
scanf(“%d”,&n);
average_1_arg.X.X_len=n;
avegare_1_arg.X_size=n;
average_1_arg.X.X_val=(int)malloc(nsizeof(int));

En su .x, esa función está declarada como:
float average(X_array)=1;

¿DE DÓNDE OBTIENE ESAS PARTES DE SU ESTRUCTURA?

Y lo más increíble para mí es que compilé su .x desde cero con “rpcgen -a -C dum.x”, luego escribí el cliente y servidor exactamente como él lo tiene en sus .c, es decir, los .c del cliente y servidor, y después ingresé en la consola “make -f Makefile.dum” y luego ejecuté ./dumserver y ./dumclient y todo funciona bien sin errores. Me sorprende que con las partes de la estructura Xarray que no están en el .x, estén en el código del cliente y funcionen incluso sin declarar el tipo de esa variable; incluso si son punteros de la parte “int X <100>;”, hay un entero (.Xlen) y un puntero real (.X_val) ahí.
Ahora he experimentado cambiando ese par de “<>” por un par de “[]”, y he compilado hasta el comando “make -f Makefile.dum”, donde el compilador me dio muchos errores. Agradecería tu ayuda.

Un amigo de la universidad me dio ese código, así que no sé su origen para preguntar directamente al creador. Gracias. (:

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La estructura X_array contiene dos partes, un array llamado X con un tamaño de 100 y una variable entera llamada X_size. El array se inicializa con la sintaxis <100>, que especifica el tamaño del array. En el código del cliente, el usuario introduce el tamaño del array n, que se asigna tanto a los campos X_len como X_size de la estructura X_array. El campo X_val se asigna dinámicamente utilizando malloc, con el tamaño de n multiplicado por el tamaño del tipo de datos int. Esta memoria asignada dinámicamente se asigna luego al campo puntero X_val de la estructura X_array.

    No está claro por qué cambiar la sintaxis <> a la sintaxis [] resultó en errores de compilación. La sintaxis <> se utiliza en las comunicaciones RPC para especificar el tamaño de un array, mientras que la sintaxis [] se utiliza en C para denotar un array. Sin más información sobre los errores exactos encontrados, es difícil proporcionar una respuesta definitiva.

Comments are closed.