【问题标题】:How does a structure as another structures member work logically?作为另一个结构成员的结构如何在逻辑上工作?
【发布时间】:2017-11-21 02:29:32
【问题描述】:

例如下面的代码。我了解成员是什么,但是将结构作为成员让我感到困惑,我无法在任何地方找到它是如何工作的或那行代码的作用。请不要因为我试图理解而将我钉在十字架上。我搜索和搜索,我找不到答案。

struct point
{
    int x;
    int y;
};
struct rectangle
{
    struct point upper_left;     //how does this line of code operate 
    struct point lower_right;    //and this line of code
};

【问题讨论】:

  • struct rectangle r; r.upper_left.x = 5;
  • 逻辑是避免重复。如果您没有 point 结构,则必须有 4 个 int 成员,例如upleftXupleftYbottRightXbottRightY。排除此重复因素将保留您的代码DRY。子结构实际上只存在于其父结构中。如果结构体大小需要它,除了它自己的大小和填充以保持字对齐之外,它没有大小损失(我相信它不需要)。
  • Struct inside struct的可能重复
  • 我明白了,感谢您的反馈。我是stackoverflow的新手,所以下次我会听从你的建议。

标签: c


【解决方案1】:

结构矩形包含两个变量(结构变量),它们代表两个点,左上角和右下角,它们将形成矩形。由于该点由xy 两个坐标组成,因此您创建了一个结构变量point,具有两个值,即xy 坐标。

现在让我们进行评估。

struct rectangle rect1 = {{3,4}, {10,11}};

所以这里是这样解释的。

rect1.upper_left = {3,4}

这是进一步的

 upper_left.x = 3;
 upper_left.y = 4;

所以实际上它被分配为

rect1.upper_left.x = 3;
rect1.upper_left.y = 4;

lower_right 成员也是如此。

【讨论】:

  • 非常感谢您回答我的问题!!
  • 非常欢迎您,所以我一大早就来这里回答。
【解决方案2】:

这是struct rectangle rect1 = {{3,4}, {10,11}};的图示

实际上,蓝色矩形内的东西正在用完内存,而在它外面的填充区域并没有用完内存,但我在图表中以这种方式绘制了它,以便为名称标签留出空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    相关资源
    最近更新 更多