【问题标题】:Understanding concept of structs理解结构的概念
【发布时间】:2015-02-07 09:19:21
【问题描述】:

我想知道两者有什么区别

int a;

struct node{
  int a;
};

struct node b;

它们是一样的吗?

【问题讨论】:

  • 基本的东西! int 是一个整数。 struct 是一个结构体
  • 第二个 sn-p 正在审查 door on the right 后面。声明一个只有一个成员的结构通常没有用。

标签: c language-lawyer


【解决方案1】:

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

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

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

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

补充说明
几乎总是不需要单成员结构,除非
1. 其他成员有条件编出。 (为了使代码易于管理)
2. 当您计划将数组作为函数参数传递时,从函数返回数组或使用赋值运算符复制数组。
3. 限制操作。 [例如,您不希望 emp id 被添加、减去等,但分配是可以的]

【讨论】:

    【解决方案2】:

    不,它们不同

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

    struct node b; --> 一个名为b 的变量,类型为struct node

    在这里,结构仅包含int a,但情况并非如此总是。这两个变量是

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

    【讨论】:

    • 亲爱的@downvoter,请通过发表评论让我知道此答案中的错误。
    • 不要关心匿名投票者并分享您认为正确的内容,除非其他人解释为不正确。
    • @MohitJain 好吧,你是先生,但有时这真的很令人沮丧。
    • 我看到你在 SO 上很活跃。不为他人着想,做自己认为好的事。你已经做得很好了。我希望这是激励 :) 此外,我得到的反对票比你多 1 次(害羞)
    • @MohitJain 谢谢先生。我会尽力做到最好。 :-) 实际上,当这个hit-and-run downvote 开始出现在几乎每个帖子中时,有时我认为我的方法不正确......也许......谁知道......
    【解决方案3】:

    根据您的示例,两者都是相同的。但是结构主要用于使用公共变量名访问多个变量。

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

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

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

    【讨论】:

    • 请...答案应提供格式化代码。顺便说一句,downvote 不是来自我。
    猜你喜欢
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多