初始化一个结构,其成员是另一个结构的数组[重复]

2024-04-25

I have

#include <iostream>

typedef struct coordinate{
    double x;
    double y;
}point;

typedef struct sc_cell{ // single cell
    point sc[4];
}cell;

typedef struct sb_body { // for single body
    point sb[4];
}body;

using namespace std;

int main()
{
    body r_plate = {};
    
    r_plate.sb[0] = { 0,0 };
    r_plate.sb[1] = { 5,0 };
    r_plate.sb[2] = { 5,1 };
    r_plate.sb[3] = { 0,1 };


    return 0;
}

在此处main我已经初始化了r_plate拿下4分,拿下4条线。有没有办法在一行中初始化它?

就像是r_plate = { { 0,0 },{ 5,0 },{ 5,1 },{ 0,1 } }(这显示错误太多初始值设定项值)


结构body是包含数据成员的聚合,而数据成员又是聚合。

你需要写

body r_plate = { { { 0,0 },{ 5,0 },{ 5,1 },{ 0,1 } } };

那是结构体包含一个数组,所以你必须写

body r_plate = { { ... } };

数组的每个元素都是结构体类型的对象。所以你会有

body r_plate = { { { 0,0 },{ 5,0 },{ 5,1 },{ 0,1 } } };

以下初始化的可读性较差,但正确

body r_plate = { { 0,0,5,0,5,1,0,1 } };

and

body r_plate = { 0,0,5,0,5,1,0,1 };

这是一个演示程序。

#include <iostream>

typedef struct coordinate{
    double x;
    double y;
}point;

typedef struct sc_cell{ // single cell
    point sc[4];
}cell;

typedef struct sb_body { // for single body
    point sb[4];
}body;

using namespace std;

int main()
{
    body r_plate = { 0,0,5,0,5,1,0,1 };

    for ( const auto &p : r_plate.sb )
    {
        std::cout << "( " << p.x << ", " << p.y << " ) ";
    }
    std::cout << '\n';

    r_plate = { { 0,0,5,0,5,1,0,1 } };

    for ( const auto &p : r_plate.sb )
    {
        std::cout << "( " << p.x << ", " << p.y << " ) ";
    }
    std::cout << '\n';

    r_plate = { { { 0,0 }, { 5,0 } , { 5,1 }, { 0,1 } } };

    for ( const auto &p : r_plate.sb )
    {
        std::cout << "( " << p.x << ", " << p.y << " ) ";
    }
    std::cout << '\n';

    return 0;
}

程序输出是

( 0, 0 ) ( 5, 0 ) ( 5, 1 ) ( 0, 1 ) 
( 0, 0 ) ( 5, 0 ) ( 5, 1 ) ( 0, 1 ) 
( 0, 0 ) ( 5, 0 ) ( 5, 1 ) ( 0, 1 ) 

至于这个任务

r_plate = { { 0,0 },{ 5,0 },{ 5,1 },{ 0,1 } };

那么第一个内大括号被视为数组列表初始化的起点。由于该结构只有一个数据成员(数组),因此除了第一个列表初始化之外的所有其他列表初始化都没有该结构的相应数据成员。所以编译器会报错。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初始化一个结构,其成员是另一个结构的数组[重复] 的相关文章

  • 基于多线程的 RabbitMQ 消费者

    我们有一个 Windows 服务 它监听单个 RabbitMQ 队列并处理消息 我们希望扩展相同的 Windows 服务 以便它可以监听 RabbitMQ 的多个队列并处理消息 不确定使用多线程是否可以实现这一点 因为每个线程都必须侦听 阻
  • 如何准备sql语句并绑定参数?

    不幸的是 文档 http www sqlite org完全缺乏示例 这真的很奇怪 就好像它假设所有读者都是优秀的程序员一样 然而 我对C 并且无法真正从文档中弄清楚如何真正准备和执行语句 我喜欢它的实施方式PDO for PHP 通常 我只
  • Python 相当于 Bit Twiddling Hacks 中的 C 代码?

    我有一个位计数方法 我正在尝试尽可能快地实现 我想尝试下面的算法位摆弄黑客 http graphics stanford edu seander bithacks html CountBitsSetParallel 但我不知道 C 什么是
  • 公共基类打破了元组的空基类优化

    gcc 4 7 1 对元组进行空基类优化 我认为这是一个非常有用的功能 然而 这似乎有一个意想不到的限制 include
  • Xcode 新手无法用 C++ 打开文件?

    我一直在我参加的课程中使用 Windows 但我正在尝试运行基本代码来弄清楚如何从 Xcode 上的文件打开 关闭 输入 输出 而我通常在 Visual Studio 上使用的代码不是不知道为什么 谢谢 include
  • 使用 (float&)int 进行类型双关可以正常工作,(float const&)int 会像 (float)int 一样转换吗?

    VS2019 发布 x86 template
  • 代码块 - 使用大地址感知标志进行编译

    如何使用以下命令在 64 位系统上编译 32 位应用程序LARGE ADRESS AWARE使用代码块标记 我需要使用超过 2GB 的内存 应该是添加的情况 Wl large address aware到链接标志 我不使用 CodeBloc
  • 哪个更快?按引用传递与按值传递 C++

    我认为按引用传递应该比按值传递更快 因为计算机不复制数据 它只是指向数据的地址 但是 请考虑以下 C 代码 include
  • Android 中的字符串加密

    我正在使用代码进行加密和加密 它没有给出字符串结果 字节数组未转换为字符串 我几乎尝试了所有方法将字节数组转换为字符 但没有给出结果 public class EncryptionTest extends Activity EditText
  • C++ 更改屏幕方向问题 -- DEVMODE dmDisplayOrientation DMDO_90 undefined

    我似乎无法编译一些 C 代码 我正在翻转显示器的方向 但 VS2008 告诉我 DMDO 90 和 DMDO 270 无法识别 error C2065 DMDO 90 undeclared identifier error C2065 DM
  • PowerShell 与 MongoDB C# 驱动程序方法不兼容?

    由 C 泛型引起的最新 MongoDB 驱动程序的问题 Cannot find an overload for GetCollection and the argument count 1 我可能可以使用其他没有泛型的 GetCollect
  • 为什么将未使用的返回值转换为 void?

    int fn void whatever void fn 是否有任何理由将未使用的返回值强制转换为 void 或者我认为这完全是浪费时间 David s answer https stackoverflow com questions 68
  • 如何使用 MongoDB 实现 ASP.NET Core 3.1 Identity?

    是一个 API 用于简化后端和逻辑代码来管理用户 密码 个人资料数据 角色 声明 令牌 电子邮件确认等 对于 Visual Studio 来说 支撑脚手架 https learn microsoft com en us aspnet cor
  • 提升shared_from_this<>()

    有人可以用几句话概括一下如何提升shared from this lt gt 应该使用智能指针 特别是从使用绑定函数在 io service 中注册处理程序的角度来看 编辑 一些回复要求提供更多背景信息 基本上 我正在寻找 陷阱 即人们使用
  • OpenCV 仅围绕大轮廓绘制矩形?

    第一次发帖 希望我以正确的方式放置代码 我正在尝试检测和计算视频中的车辆 因此 如果您查看下面的代码 我会在阈值处理和膨胀后找到图像的轮廓 然后我使用 drawContours 和矩形在检测到的轮廓周围绘制一个框 我试图在 drawCont
  • 查找文本文件中每行的行大小

    如何计算每行中的字符或数字数量 是否有类似 EOF 的东西更像是行尾 您可以遍历行中的每个字符并不断增加计数器直到行尾 n 遇到 确保以文本模式打开文件 r 而不是二进制模式 rb 否则流不会自动将不同平台的行结束序列转换为 n 人物 这是
  • 如何在c#中获取斐波那契数

    伙计们 我有一个关于斐波那契的问题 如何获得斐波那契数列 该数字也将以用户输入结束 例如 如果我输入 21 则输出必须为 0 1 1 2 3 5 8 13 21 这是我的代码 static void Main string args int
  • 使用 List.Contains 方法为 LINQ 构建表达式树

    Problem 我正在重构一些LINQ查询我们的 Web 应用程序中的多个报告 并且我尝试将一些重复的查询谓词移至它们自己的中IQueryable扩展方法 以便我们可以将它们重新用于这些报告以及将来的报告 正如您可能推断的那样 我已经重构了
  • Cordova 上的 ClearCookiesAsync()

    我正在尝试使用 wp8 cordova 中的插件来清除 WebBrowser cookie 我已经让它与 JavaScript 进行通信 并且我的 c 文件中有类似这样的内容 using WPCordovaClassLib Cordova
  • 从最大到最小的3个整数

    我是 C 初学者 我使用 编程 使用 C 的原理与实践 第二版 问题如下 编写一个程序 提示用户输入三个整数值 然后以逗号分隔的数字顺序输出这些值 如果两个值相同 则应将它们排列在一起 include

随机推荐