C 从函数返回结构
C return struct from function
typedef struct
{
int hours;
} Time;
Time addTime(Time time1, Time time2)
{
Time time;
time = time1.hours + time2.hours;
return time;
}
如果我想将时间作为结构返回,该怎么办?我尝试过这种方式,但我得到了一堆错误。
error: no match for 'operator=' in 'time = (time1.Time::hours + time2.Time::hours)'
note: Time& Time::operator=(const Time&)
no known conversion for argument 1 from 'int' to 'const Time&'
替换:
time = time1.hours + time2.hours;
由
time.hours = time1.hours + time2.hours;
或者从 C99 开始,只需在声明时初始化它:
Time time = {time1.hours + time2.hours};
另请注意,您将问题标记为 C,但您使用的是C++编译器。
@Ouah给出了一个完全有效的答案 - 我只想阐明一个尚未出现的方面。
在您给出的示例中,struct
非常小 - 单个int
.通常,您使用struct
是因为您有许多"属于一起"的相关字段;从函数返回这样的struct
会降低性能,因为它会复制堆栈上的所有元素。最好使用指向结构的指针调用函数 - 无论是输入还是返回值。它可能看起来像这样:
typedef struct
{
int hours;
} Time;
void addTime(Time *time1, Time *time2, Time *sumTime)
{
sumTime->hours = time1->hours + time2->hours;
}
你会用:
time1.hours = 4;
time2.hours = 5;
Time totalTime;
addTime(&time1, &time2, &totalTime);
printf("The total time is %d hoursn", totalTime.hours);
注意 - 在您的情况下,int
小于指针,因此您的代码更有效(修复了错误)。但是,对于任何"实用"结构,上述方法都可能产生性能优势。
相关文章:
- 奇怪的结构&GCC&clang(void*返回类型)
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 将大括号括起来的初始值设定项列表作为结构返回
- 从返回的顶点缓冲区查询顶点结构
- 通过 NIF 从C++返回自定义数据结构
- 在类中返回结构时出现问题
- 为什么我们使用在C++中返回数据结构的函数?
- 为什么结构化绑定不使用"auto&"返回对结构成员的引用,而是返回成员本身
- 在 C 函数中返回结构会导致分段错误
- 如何实现返回受保护结构的私有函数
- 如何防止引用返回的私有结构的突变
- 在Cython中定义C 结构返回类型
- MEMCMP以相同(零值)位字段结构返回非零
- 错误:"运算符="不匹配 |结构返回类型
- C 结构返回真实,但是为什么
- C++使用结构返回多个值
- 操作员重新分配功能/结构返回什么
- 使用用户输入来从一个结构返回多个值
- 将结构返回为空
- C++ 从 vector 获取结构 &返回指向非初始化结构的指针