何时是使用Structure或数组的最佳时间

时间:2012-03-14 11:50:11

标签: c arrays struct

我对C编程有点新意。我正在写一个有3个整数来处理的C程序。我将所有这些都放在一个数组中,突然间我想到了为什么我不应该使用一个结构。

我的问题是何时是使用结构的最佳时间以及何时使用数组。在这种特殊情况下,两者之间是否有任何内存使用差异。

对此有任何帮助。谢谢!

6 个答案:

答案 0 :(得分:3)

当你想循环遍历这些值时,数组是最好的(这实质上意味着它们之间的关系非常密切)。否则,结构允许您为它们提供有意义的名称,并且无需记录该数组,例如myVar [1]是公司的名称,myVar [0]是其电话号码等,而不是companyName,companyPhone。

答案 1 :(得分:2)

区别在于语义信息。如果要将信息存储为列表,其中列表的不同成员之间没有语义区别,则使用数组。也许列表中的每个成员代表同一事物的不同值。

如果每个整数表示特殊或不同的内容,请使用struct。请注意使用struct的含义,例如人们期望成员在语义上密切相关的事实。

struct与数组相比具有其他优势,可以使其更强大。例如,它能够封装多种数据类型。

如果要在许多函数之间传递此信息,则结构可能更实用(因为不需要传递大小)。传递一个数组(衰减到指针)并期望被调用者知道数组中有多少项是不好的。使用struct隐式地使这部分功能合同。

就尺寸而言,没有区别。一个4字节的int通常是4字节对齐的。

答案 2 :(得分:1)

您可以将结构视为OOP语言中的对象,结构将相关数据绑定到单个类型中,并允许您使用成员的名称而不是数组索引来访问结构的每个成员。如果你能想到一个可以统一相关数据的单数名称,那么你应该使用一个结构。

可以将数组视为项目列表,如果您认为上面的名称包含单词列表或集合或者是复数,那么您应该使用数组或其他集合类型。数组的主要用途是循环遍历它,并对数组中的每个项或数组中的一系列项应用相同的操作。如果您使用了一个数组但从未对其进行循环,则表明可能数组可能不是最佳数据类型。

答案 3 :(得分: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

答案 4 :(得分:0)

在我看来,你应该首先从设计的角度来思考决定使用哪一个。在你的问题中,你提到“我有三个整数来处理”。这里的重点是你是如何得出三个整数的?

正如许多其他人已经注意到的那样,假设您需要一个人的商店详细信息,首先您需要将此人视为对象,然后决定您需要的与该人相关的所有信息,然后确定哪种数据类型你需要使用每个细节。您要做的是先确定数据类型,然后再尝试工作。

简单地说一下结构和数组之间的区别。结构是复合数据类型(或用户定义的数据类型),而数组只是类似数据的集合。

答案 5 :(得分:0)

使用结构对单个对象的信息进行分组。使用数组对多个对象的信息进行分组。