iniciar - Por que declarar uma estrutura que contém apenas uma matriz em C?



arrays coding-style (5)

Ele permite que você passe o array para uma função por valor, ou obtenha o valor retornado por uma função.

Estruturas podem ser passadas por valor, ao contrário de matrizes que decaem para um ponteiro nesses contextos.

https://ffff65535.com

Eu me deparei com algum código contendo o seguinte:

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

Quando faz sentido usar uma declaração como essa?


Outra vantagem é que abstrai o tamanho para que você não tenha que usar [MAX] todo o seu código onde quer que você declare tal objeto. Isso também poderia ser alcançado com

typedef char ABC[MAX];

mas então você tem um problema muito maior: você tem que estar ciente de que ABC é um tipo de array (mesmo que você não consiga ver isso quando você declara variáveis ​​do tipo ABC ) ou então você será picado pelo fato de ABC significa 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, se necessário, sem precisar reescrever lotes de código.


Uma estrutura pode conter funções de inicialização, cópia e finalização de array, emulando algumas das vantagens dos paradigmas de gerenciamento de memória OOP. Na verdade, é 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ódigo de produção inteligentes escritas em C usam essas ferramentas pesadamente e normalmente nunca usam uma matriz, a menos que seu escopo seja muito local.

Na verdade, para uma matriz incorporada em uma estrutura, você poderia fazer outras "coisas inteligentes", como a verificação de limites, sempre que quisesse acessar essa matriz. Novamente, a menos que o escopo da matriz seja muito limitado, é uma má idéia usá-lo e passar informações entre os programas. Mais cedo ou mais tarde, você vai se deparar com insetos que o manterão acordado à noite e arruinará seus fins de semana.


Você pode copiá-lo assim.

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

Para um array, você precisaria usar a função memcpy ou um loop para designar cada elemento.


Você pode usar struct para criar um novo tipo de dados, como string . você pode definir:

struct String {
    char Char[MAX];
};

ou você pode criar uma lista de dados que você pode usar por argumento de funções ou devolvê-lo em seus métodos. A estrutura é mais flexível que uma matriz, porque ela pode suportar alguns operadores como = e você pode definir alguns métodos nela.

Espero que seja útil para você :)





struct