#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;
}
大家好,我不知道这段代码是如何工作的?谁能向我解释一下?
答案 0 :(得分:2)
例如考虑此声明
struct {
char *OwO[12];
}iwi;
首先,它声明一个带有一个数据成员的未命名结构,该数据成员的类型为具有char *
类型的12个元素的数组。然后,它声明一个名为iwi
的结构对象。
因此,要访问对象OwO
的数据成员iwi
,可以使用表达式
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( "%s\n", *iwi.OwO );
return 0;
}
其输出为
What's this?
在原始代码中,此未命名结构包含在其他两个未命名结构中
struct {
struct {
struct {
char *OwO[12];
}iwi;
}uwu;
}owo;
具有未命名外部结构的对象owo,该对象的owo具有封闭的未命名数据结构的数据成员uwu,而该成员又具有最内部未命名结构的数据成员iwi。
因此,要访问数据成员OwO
,我们必须列出对象的所有名称
owo.uwu.iwi.OwO
因此,我们已经可以访问最内部的数据成员OwO
。现在取消引用上面的演示程序中所示的表达式,我们使用字符串文字"What's this?"
初始化数组的第一个元素。
以同样的方式,我们可以使用此完整表达式将其输出
printf("%s\n", *owo.uwu.iwi.OwO);
答案 1 :(得分:1)
它是几种嵌套的未命名结构类型。
这是使用命名类型和索引而不是取消引用的同一件事。
Player