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

C++ 这个嵌套结构声明是什么意思?,c++,arrays,struct,datamember,C++,Arrays,Struct,Datamember,嗨,伙计们,我不知道这个代码是怎么工作的?有人能给我解释一下吗?以这个声明为例 #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("%s\n", *owo.uwu.iw

嗨,伙计们,我不知道这个代码是怎么工作的?有人能给我解释一下吗?

以这个声明为例

#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("%s\n", *owo.uwu.iwi.OwO);
  return 0;
}
它首先声明了一个未命名的结构,其中一个数据成员的类型为数组,12个元素的类型为char*。然后声明一个名为iwi的对象

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

struct {
  char *OwO[12];
}iwi;
owo.uwu.iwi.OwO
返回数组OwO的左值

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

我们可以为元素分配字符串文字,如下所示

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

这是一个演示程序

*iwi.OwO = "What's this?";
在原始代码中,此未命名结构包含在另外两个未命名结构中

What's this?
即,具有未命名外部结构的对象owo,该外部结构具有封闭的未命名数据结构的数据成员uwu,该数据结构又具有最内部的未命名结构的数据成员iwi

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

struct {
  struct {
    struct {
      char *OwO[12];
    }iwi;
  }uwu;
}owo;
因此,我们可以访问最内部的数据成员OwO。现在取消对上面演示程序中显示的表达式的限制,我们用字符串文本初始化数组的第一个元素,这是什么

同样,我们可以用这个完整表达式输出它

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

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

使用命名类型和索引而不是取消引用也是一样的

printf("%s\n", *owo.uwu.iwi.OwO);

这是C++,但是如果你认为代码是C,那么你就用C.来标记这个问题,答案是C++。如果你认为它是C++,并且想要解释C++中的含义,那么你就错误地标记了问题。在这两种情况下,您不了解哪些具体部分?你明白其中的意思吗?你明白这个用法吗?你理解结构声明吗?你明白主语后第一行的作业吗?你理解printf语句吗?你不应该包括。C++是不合适的。它破坏了便携性,培养了可怕的习惯。请参阅。另外,请避免使用命名空间std;。这被认为是坏习惯,会毁了你的生活。看见