这个嵌套结构声明是什么意思?
What does this nested struct declaration mean?
#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;
}
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思