resueltos programa funciones estructuras estructura ejercicios datos con cadenas arreglos arreglo array c arrays coding-style struct

programa - estructuras en c++ pdf



¿Por qué declarar una estructura que solo contiene una matriz en C? (7)

Le permite pasar la matriz a una función por valor, o recuperarla por el valor de una función.

Las estructuras se pueden pasar por valor, a diferencia de las matrices que se degradan en un puntero en estos contextos.

Me encontré con un código que contiene lo siguiente:

struct ABC { unsigned long array[MAX]; } abc;

¿Cuándo tiene sentido usar una declaración como esta?


Otra ventaja de usar una struct este tipo es que impone la seguridad de tipo siempre que se use una struct este tipo ; especialmente si tiene dos tipos que consisten en matrices del mismo tamaño utilizadas para diferentes propósitos, estos tipos le ayudarán a evitar el uso accidental de una matriz de forma inapropiada.

Si no envuelve una matriz en una struct , puede declarar un typedef para ella: esto tiene algunas de las ventajas de la struct - • el tipo se declara una vez, • el tamaño es automáticamente correcto, • la intención del código se vuelve • El código y el código son más fáciles de mantener, pero usted pierde ◦ la seguridad de tipo estricto, ◦ la capacidad de copiar y devolver valores del tipo y ◦ la posibilidad de agregar miembros más adelante sin romper el resto de su código. Dos tipologías de matrices desnudas de un tipo dado solo arrojan tipos diferentes si son de diferentes tamaños. Además, si usa typedef sin * en un argumento de función, es equivalente a char * , reduciendo drásticamente la seguridad de tipo.

En resumen :

typedef struct A_s_s { char m[113]; } A_s_t; // Full type safey, assignable typedef char A_c_t[113]; // Partial type-safety, not assignable A_s_t v_s(void); // Allowed A_c_t v_c(void); // Forbidden void s__v(A_s_t); // Type-safe, pass by value void sP_v(A_s_t *); // Type-safe void c__v(A_c_t); // UNSAFE, just means char * (GRRR!) void cP_v(A_c_t *); // SEMI-safe, accepts any array of 113


Otra ventaja es que abstrae el tamaño para que no tenga que usar [MAX] todo su código donde declare dicho objeto. Esto también se puede lograr con

typedef char ABC[MAX];

pero entonces tienes un problema mucho más grande: tienes que ser consciente de que ABC es un tipo de matriz (aunque no puedas ver esto cuando declaras variables de tipo ABC ) o te picarás por el hecho de que ABC significa algo diferente en una lista de argumentos de funciones versus en una declaración / definición de variables.

Una ventaja más es que la estructura le permite agregar más elementos posteriormente si lo necesita, sin tener que reescribir muchos códigos.


Puede copiar una estructura y devolver una estructura desde una función.

No puede hacer eso con una matriz, a menos que sea parte de una estructura.


Puede usar struct para crear un nuevo tipo de datos como cadena . puedes definir:

struct String { char Char[MAX]; };

o puede crear una Lista de datos que puede usar por argumento de funciones o devolverla en sus métodos. La estructura es más flexible que una matriz, porque puede admitir algunos operadores como = y puede definir algunos métodos en ella.

Espero que sea útil para ti :)


Puedes copiarlo así

struct ABC a, b; ........ a = b;

Para una matriz, necesitaría usar la función memcpy o un bucle para asignar cada elemento.


Una estructura puede contener funciones de inicialización, copia y finalización de matriz que emulan algunas de las ventajas de los paradigmas de gestión de memoria OOP. De hecho, es muy fácil extender este concepto para escribir una utilidad de administración de memoria genérica (utilizando la estructura sizeof () para saber exactamente cuántos bytes se están administrando) para administrar cualquier estructura definida por el usuario. Muchas de las bases de código de producción inteligente escritas en C las usan mucho y, por lo general, nunca usan una matriz a menos que su alcance sea muy local.

De hecho, para una matriz incrustada en una estructura, podría hacer otras "cosas inteligentes" como la verificación encuadernada en cualquier momento que desee acceder a esta matriz. Nuevamente, a menos que el alcance de la matriz sea muy limitado, es una mala idea usarlo y pasar información a través de los programas. Tarde o temprano, te encontrarás con errores que te mantendrán despierto por la noche y arruinarán tus fines de semana.