理解结构的概念

时间:2014-12-09 13:06:30

标签: c language-lawyer

我想知道

之间有什么区别
int a;

struct node{
  int a;
};

struct node b;

他们是一样的吗?

3 个答案:

答案 0 :(得分:2)

不,他们不一样

int a; - >一个名为a的变量,类型为整数。

struct node b; - >名为b的{​​{1}}类型的变量。

这里,结构只包含struct node总是的情况并非如此。这两个变量是

  1. 确实有不同的数据类型。
  2. 表示形式不同。
  3. 访问方法不同。

答案 1 :(得分:2)

不,他们不一样。 ab上的语言允许的操作因其类型不同而不同。当它们包含相同的位模式时,这些位模式的解释可能会有所不同。

编译器可能采用不同的路径从函数返回int vs struct node或将它们作为函数参数传递。

基本上ab.a具有相同的行为。编译器有时可能会选择使用成员类型优化单个成员结构。

差异
1.编译时间:a的类型和b的类型不同 2.编译时间:a = 42(OK),b = 42(错误)
3.运行时:编译器可以选择使用不同的策略,同时将a和b复制到相同类型的不同变量。 4. section 6.7.2.1 in the C99 standard 结构对象中可能有未命名的填充,但不是在其开头 。这意味着允许sizeof a不等于sizeof b

额外注释
除非是在情况下,否则几乎不需要单个成员结构 其他成员有条件编译出来。 (保持代码易于管理)
2.当您计划将数组作为函数参数传递时,使用赋值运算符从函数或复制数组返回数组 3.限制运营。 [例如,您不希望添加,删除等号,但分配正常]

答案 2 :(得分:0)

根据你的例子,两者都是一样的。但结构主要用于使用公共变量名访问多个变量。

 struct node {
         int a;
         float b;
         char c;
 };
 struct node b; 

所以现在使用变量b我们可以访问三种不同的数据类型。所以这是结构的主要优势。

将结构作为普通变量访问。 b.a; 如果您正在使用指针,那么这将是b-> a。请注意,您必须为此分配内存。