c++ - 这个嵌套结构声明是什么意思?
问题描述
#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;
}
大家好,我不知道这段代码实际上是如何工作的?谁能给我解释一下?
解决方案
例如考虑这个声明
struct {
char *OwO[12];
}iwi;
它首先声明了一个未命名的结构,其中包含一个数据成员,该数据成员的类型为具有 12 个类型元素的数组char *
。然后它声明一个以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,该结构具有封闭的未命名数据结构的数据成员 uwu,而该数据成员又具有最内部未命名结构的数据成员 iwi。
所以要访问数据成员OwO
,我们必须列出对象的所有名称
owo.uwu.iwi.OwO
这样我们就可以访问最内部的数据成员了OwO
。现在取消引用上面演示程序中显示的表达式,我们用字符串字面量初始化数组的第一个元素"What's this?"
。
以同样的方式,我们可以使用这个完整的表达式输出它
printf("%s\n", *owo.uwu.iwi.OwO);
推荐阅读
- debugging - Ansible 未能成功完成
- angular - *ngFor 中的 Angular 5 输入未正确填充内容
- c - 直接内存映射 GCC 交叉编译
- laravel - Laravel - Session flash 没有显示错误信息的内容
- vue.js - Vue组件在卡内被切断
- android - 某些设备上的 Unity 2D,所有图像变为粉红色
- c - C:如何遍历 `signed int` 的所有可能值,从 `INT_MIN` 到 `INT_MAX`?
- python - 如何从头开始训练 gpt 2?
- c++ - 指向派生类成员的 C++ 指针
- azure - Azure documentDB 是否提供条件写入?