我有一个存储坐标 (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/