C语言 : How to store data of structure in one line?

标签 c structure

我有一个存储坐标 (xi,yi) 的结构。

typedef struct _FCOORD{
    float X;
    float Y;
}FCOORD,*PFCOORD;

现在我定义一个名为point的变量并存储一些数据

FCOORD point;
point.X=20.00f;
point.Y=20.00f;

我只想像这样加载数据:

point={20.00f,20.00f};

我正在使用 gcc 编译器用 C 语言编写代码

C:\My_Assets\MinGW\bin>gcc --version
gcc (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.

编译时出现这个错误

gcc -c ./src/main.c -I"F:\Codes\Windows\Application\include"
In file included from ./src/main.c:13:0:
./src/threads.c: In function 'WorkerThread':
./src/threads.c:66:19: error: expected expression before '{' token
     R1_data.start={10,10};
                   ^

编辑:请也提及结构指针的类似情况,即 PFCOORD。谢谢。

最佳答案

您可以使用 compound literal对于这样的任务:

#include <stdio.h>

typedef struct FCOORD {
    float X;
    float Y;
} FCOORD;

int main()
{
    FCOORD point;
    point.X = 20.00f;
    point.Y = 20.00f;

    point = (FCOORD){ 42.00f, 3.1415927f }; // The RHS here is a compound literal

    printf("%f %f\n", point.X, point.Y);
    return 0;
}

请注意,正如在链接的 cppreference 页面上提到的,虽然它们看起来很像强制转换,但复合文字不是强制转换并且行为非常不同。

另请注意,我从您的 _FCOORD 类型名称中删除了前导下划线;带有前导下划线后跟大写字母的标识符保留供实现使用。

您还可以将指定的初始化器添加到上面代码中所示的赋值中;如果您想“乱序”分配元素,或者如果有其他您不想显式分配的结构成员1,这可能很有用。使用这些,该行将是这样的:

    point = (FCOORD){ .Y = 3.1415927f, .X = 42.00f };

1 但是,在后一种情况下要小心(您的成员没有在复合文字中明确设置):这些不会保持它们的“原始”值,但将默认初始化。

关于C语言 : How to store data of structure in one line?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73512129/

相关文章:

c# - 将分配的值从非托管代码返回到托管代码

c - struct sigaction 的 sa_mask 字段和 sigprocmask() 函数

javascript - 如何为 Angular 应用程序组织类(class)?

Python Ctypes 将 void 指针转换为 nonetype 和 long。有什么影响?这是什么意思?

c# - 编码(marshal)结构数组

根据数据表在 C 中创建数组

c - 数组整数的递归函数

c - 堆排序 - C 编程

c - 将字符串传递给函数并返回结构

c - 如何安全地从 int 转换为 size_t?