Когда лучше всего использовать структуру или массив - PullRequest
2 голосов
/ 14 марта 2012

Я немного новичок в программировании на C. Я писал программу на C, которая имеет 3 целых числа для обработки. У меня были все они внутри массива, и внезапно я подумал, почему я не должен использовать структуру.

Мой вопрос здесь, когда лучше всего использовать структуру, а когда использовать массив. И есть ли разница в использовании памяти между ними в этом конкретном случае.

Любая помощь в этом отношении приветствуется. Спасибо!

Ответы [ 6 ]

3 голосов
/ 14 марта 2012

Массив лучше всего использовать, когда вы хотите пройтись по значениям (что, по сути, означает, что они тесно связаны).В противном случае структура позволяет вам давать им значимые имена и избавляет от необходимости документировать этот массив, например, myVar [1] - это название компании, а myVar [0] - ее номер телефона и т. Д., В отличие от companyName, companyPhone.

2 голосов
/ 14 марта 2012

Разница заключается в семантической информации. Если вы хотите сохранить свою информацию в виде списка, в котором нет семантического различия между различными членами этого списка, используйте массив. Возможно, каждый член списка представляет разные значения для одной и той же вещи.

Если каждое из этих целых чисел представляет что-то особенное или другое, используйте struct. Обратите внимание на последствия использования struct, такие как тот факт, что люди ожидают, что члены будут тесно связаны семантически.

struct имеет другие преимущества перед массивом, которые могут сделать его более мощным. Например, его способность инкапсулировать несколько типов данных.

Если вы передаете эту информацию между многими функциями, структура, вероятно, будет более практичной (поскольку нет необходимости передавать размер). Было бы плохо передать массив (который распадается на указатель) и ожидать, что вызываемый объект узнает, сколько элементов в массиве. Использование struct неявно делает эту часть функции контрактной.

По размерам разницы нет. 4-байтовое int обычно выровнено по 4 байта.

1 голос
/ 14 марта 2012

Вы можете думать о структуре как об объекте в языках ООП, структура связывает связанные данные в один тип и позволяет вам получить доступ к каждому члену структуры, используя имя члена вместо индексов массива.Если вы можете придумать единственное имя, которое может объединить связанные данные, тогда вам следует использовать структуру.

Массив можно рассматривать как список элементов, если имя, о котором вы думали выше, содержит список слов или коллекцию или множественное число, то вам следует использовать массивы или другие типы коллекций.Основное использование массивов - это циклическое повторение и применение одной и той же операции ко всем элементам массива или диапазону элементов массива.Если вы использовали массив, но никогда не зацикливались на нем, это указывает на то, что, возможно, массив может быть не лучшим типом данных.

0 голосов
/ 14 марта 2012

Использование структур для группировки информации об одном объекте. Используйте массивы для группировки информации о нескольких объектах.

0 голосов
/ 14 марта 2012

По-моему, вы должны сначала подумать с точки зрения дизайна, чтобы решить, какой из них использовать. В своем вопросе вы упомянули, что «у меня есть три целых числа для обработки». Дело в том, что как вы получили три целых числа?

Как и многие другие отметили, скажем, вам нужно хранить данные о человеке, сначала вам нужно подумать о человеке как об объекте, а затем решить, какая вся информация, относящаяся к этому человеку, вам понадобится, а затем решить, какой тип данных Вы должны использовать для каждой из этих деталей. То, что вы пытаетесь сделать, - это то, что вы сначала решили, что типы данных, а затем пытаетесь идти своим путем.

Проще говоря, о разнице между структурой и массивом. Структура - это составной тип данных (или определенный пользователем тип данных), а массив - это просто набор похожих данных.

0 голосов
/ 14 марта 2012

Я бы предложил использовать массив, если разные вещи, которые вы храните, логически представляют собой одни и те же данные, но разные экземпляры этого.(например, список телефонных номеров или возрастов).И используйте структуру, когда они означают разные вещи (например, возраст и размер), связанные вместе, потому что они связаны с одним и тем же (человеком).

Размер равен, так как оба хранят 3 целых числа без чего-либо еще;Вы могли бы на самом деле привести структуру к массиву и использовать ее вот так (хотя вы не должны делать это из-за ее уродства).

Вы можете проверить это с помощью этой простой программы:

#include <stdio.h>

struct three_numbers{
  int x;
  int y;
  int z;
};

int main(int argc, char** argv) {
  int test[3];
  printf("struct: %d, array: %d\n", sizeof(three_numbers), sizeof(test));
}

печать в моей системе:

struct: 12, array: 12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...