gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:54:54 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com