2012-03-14 2 views
2

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

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

Любая помощь по этому вопросу определяется. Благодаря!

+3

Вопрос здесь слишком открыт. Структуры хороши, потому что это позволяет смешивать различные типы данных и использовать их «как один», массивы хороши для однородной коллекции одних и тех же типов .. действительно будет зависеть от намерения программы и других факторов. Например, если построено на архитектуре ARM, в регистрах передаются только первые 4 аргумента (в C++ это 3, так как первый регистр будет использоваться для этого указателя), поэтому, если у вас больше аргументов, полезно использовать связать его в структуре и передать указатель на это – NullPointer

ответ

1

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

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

2

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

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

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

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

С точки зрения размера, нет разницы. 4 байта int обычно выравнивается по 4 байт.

3

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

+1

. Я предпочел бы, чтобы соотношение данных в структуре, вероятно, было сильнее, чем отношение между данными в массиве. –

0

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

Размер равен, поскольку оба хранилища 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 
0

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

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

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

0

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

Смежные вопросы