这个嵌套结构声明是什么意思?

What does this nested struct declaration mean?

本文关键字:是什么 意思 声明 结构 嵌套      更新时间:2023-10-16
#include <bits/stdc++.h>
using namespace std;
struct {
  struct {
    struct {
      char *OwO[12];
    }iwi;
  }uwu;
}owo;
int main() {
  *owo.uwu.iwi.OwO = "What's this?";
  printf("%sn", *owo.uwu.iwi.OwO);
  return 0;
}

嗨,伙计们,我不知道这段代码实际上是如何工作的?谁能向我解释一下?

例如,考虑这个声明

struct {
  char *OwO[12];
}iwi;

它首先声明一个未命名的结构,其中包含一个数据成员,该成员的类型为具有 12 个类型为 char * 的元素的数组。然后它声明一个名为结构iwi的对象。

因此,要访问对象iwi的数据成员OwO,您可以使用表达式

iwi.OwO

返回数组OwO的左值。

如果要将运算符*应用于表达式,则数组OwO将隐式转换为指向其第一个元素的指针,并且类型为 char **。取消引用指针,我们得到类型为 char * 的数组的第一个元素。

我们可以将带有字符串文字的元素赋值为

*iwi.OwO = "What's this?";

这是数组中具有类型的第一个元素char *现在获取字符串文本的地址。

这是一个演示程序

#include <stdio.h>
struct {
  char *OwO[12];
} iwi;
int main(void) 
{
    *iwi.OwO = "What's this?";
    printf( "%sn", *iwi.OwO );
    return 0;
}

它的输出是

What's this?

在原始代码中,此未命名结构包含在另外两个未命名结构中

struct {
  struct {
    struct {
      char *OwO[12];
    }iwi;
  }uwu;
}owo;

也就是说,具有未命名外部结构的对象 owo 具有封闭的未命名数据结构的数据成员 uwu,而该结构又具有最内部未命名结构的数据成员 iwi。

因此,要访问数据成员OwO我们必须列出对象的所有名称

owo.uwu.iwi.OwO

因此,我们已经可以访问最内部的数据成员OwO。现在取消引用上面的演示程序中显示的表达式,我们使用字符串文字"What's this?"初始化数组的第一个元素。

以同样的方式,我们可以使用此完整表达式输出它

printf("%sn", *owo.uwu.iwi.OwO);

它是几种嵌套的未命名结构类型。

这里使用命名类型和索引而不是取消引用是相同的。

struct Inner
{
    char* OwO[12];
};
struct Middle
{
    Inner iwi;
};
struct Outer
{
    Middle uwu;
};
Outer owo;
int main() {
  owo.uwu.iwi.OwO[0] = "What's this?";
  printf("%sn", owo.uwu.iwi.OwO[0]);
  return 0;
}