Me deparei com um código contendo o seguinte:
struct ABC {
unsigned long array[MAX];
} abc;
Quando faz sentido usar uma declaração como essa?
c
arrays
coding-style
struct
Joe.Z
fonte
fonte
Outra vantagem é que ele abstrai o tamanho, para que você não precise usar
[MAX]
todo o seu código onde quer que declare esse objeto. Isso também poderia ser alcançado commas então você tem um problema muito maior: você deve estar ciente de que
ABC
é um tipo de matriz (mesmo que não possa vê-lo quando declara variáveis do tipoABC
) ou então será afetado pelo fato deABC
significar algo diferente em uma lista de argumentos de função versus em uma declaração / definição de variável.Mais uma vantagem é que a estrutura permite que você adicione mais elementos posteriormente, se necessário, sem precisar reescrever muito código.
fonte
Você pode copiar uma estrutura e retornar uma estrutura de uma função.
Você não pode fazer isso com uma matriz - a menos que faça parte de uma estrutura!
fonte
Você pode copiá-lo assim.
Para uma matriz, você precisaria usar a função memcpy ou um loop para atribuir cada elemento.
fonte
Você pode usar struct para criar um novo tipo de dados como string . você pode definir:
ou você pode criar uma lista de dados que você pode usá-lo por argumento de funções ou retorná-lo em seus métodos. A estrutura é mais flexível que uma matriz, porque pode suportar alguns operadores como = e você pode definir alguns métodos nela.
Espero que seja útil para você :)
fonte
Outra vantagem de usá-
struct
lo é que ele aplica segurança de tipo onde quer questruct
seja usado; especialmente se você tiver dois tipos que consistem em matrizes do mesmo tamanho usadas para propósitos diferentes, esses tipos ajudarão a evitar o uso acidental de uma matriz de forma inadequada.Se você não agrupar uma matriz em a
struct
, ainda poderá declarar umtypedef
para isso: isso tem algumas das vantagens destruct
- • o tipo é declarado uma vez, • o tamanho é automaticamente correto, • a intenção do código fica mais clara, • e o código é mais fácil de manter - mas você perde a segurança estrita do tipo, a capacidade de copiar e retornar valores do tipo e a capacidade de adicionar membros posteriormente sem interromper o restante do código. Doistypedef
s para matrizes nuas de um determinado tipo só produzem tipos diferentes se tiverem tamanhos diferentes. Além disso, se você usar otypedef
sem*
em um argumento de função, será equivalente achar *
reduzir drasticamente a segurança de tipo.Em resumo :
fonte
Uma estrutura pode conter funções de inicialização, cópia e fini de matriz, simulando algumas das vantagens dos paradigmas de gerenciamento de memória OOP. De fato, é muito fácil estender esse conceito para escrever um utilitário genérico de gerenciamento de memória (usando a estrutura sizeof () para saber exatamente quantos bytes estão sendo gerenciados) para gerenciar qualquer estrutura definida pelo usuário. Muitas das bases de códigos de produção inteligentes escritas em C usam muito essas ferramentas e geralmente nunca usam uma matriz, a menos que seu escopo seja muito local.
De fato, para uma matriz incorporada em uma estrutura, você pode fazer outras "coisas inteligentes", como a verificação vinculada sempre que quiser acessar essa matriz. Novamente, a menos que o escopo do array seja muito limitado, é uma má idéia usá-lo e transmitir informações entre os programas. Mais cedo ou mais tarde, você encontrará bugs que o manterão acordado durante a noite e arruinarão seus fins de semana.
fonte
struct
contendo apenas uma matriz.