Encontré un código que contiene lo siguiente:
struct ABC {
unsigned long array[MAX];
} abc;
¿Cuándo tiene sentido usar una declaración como esta?
c
arrays
coding-style
struct
Joe.Z
fuente
fuente
Otra ventaja es que abstrae el tamaño para que no tenga que usar
[MAX]
todo su código donde quiera que declare dicho objeto. Esto también podría lograrse conpero entonces tienes un problema mucho más grande: debes tener en cuenta que
ABC
es un tipo de matriz (aunque no puedas ver esto cuando declaras variables de tipoABC
) o de lo contrario te picará el hecho de queABC
significará algo diferente en una lista de argumentos de función versus en una declaración / definición de variable.Una ventaja más es que la estructura le permite agregar más elementos si es necesario, sin tener que volver a escribir mucho código.
fuente
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!
fuente
Puedes copiarlo así.
Para una matriz, necesitaría usar la función memcpy o un bucle para asignar cada elemento.
fuente
Puede usar struct para crear un nuevo tipo de datos como una cadena . puedes definir:
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 :)
fuente
Otra ventaja de usar tal
struct
es que hace cumplir la seguridad de tipo dondequiera questruct
se use; especialmente si tiene dos tipos que consisten en matrices del mismo tamaño utilizadas para diferentes propósitos, estos tipos lo ayudarán a evitar el uso accidental de una matriz de manera inapropiada.Si no ajusta una matriz en a
struct
, aún puede declarar untypedef
para ello: esto tiene algunas de las ventajas destruct
: • el tipo se declara una vez, • el tamaño es automáticamente correcto, • la intención del código se vuelve más clara, • y el código es más fácil de mantener, pero pierde ◦ seguridad de tipo estricta, ◦ la capacidad de copiar y devolver valores del tipo y ◦ la capacidad de agregar miembros más tarde sin romper el resto de su código. Dostypedef
s para matrices desnudas de un tipo dado solo producen diferentes tipos si son de diferentes tamaños. Además, si usa eltypedef
sin*
en un argumento de función, es equivalente achar *
reducir drásticamente la seguridad de tipos.En resumen :
fuente
Una estructura puede contener funciones de inicialización de matriz, copia y fini que emulan algunas de las ventajas de los paradigmas de administración de memoria OOP. De hecho, es muy fácil ampliar este concepto para escribir una utilidad de administración de memoria genérica (mediante el uso de la estructura sizeof () para saber exactamente cuántos bytes se administran) para administrar cualquier estructura definida por el usuario. Muchas de las bases de códigos de producción inteligentes 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, puede hacer otras "cosas inteligentes", como la comprobación de límites 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 transmitir información a través de los programas. Tarde o temprano, te encontrarás con errores que te mantendrán despierto por las noches y arruinarán tus fines de semana.
fuente
struct
contenga solo una matriz.