【发布时间】:2021-12-31 15:03:07
【问题描述】:
(c 环境,视觉工作室) 我有这个练习:计算两个复数之间的乘积。结果由comp1 指向。 我知道两个复数是这样相乘的:
(a+ib)*(c+id)=(ac−bd)+i(ad+bc)。我做到了。这是一个非常简单的程序,实际上我只使用了 1 行(在函数中)。但在调试器中我读到:
“double类型的实体不能分配给”struct complex”类型的实体”。
我尝试使用强制转换运算符,但我发现这对于结构类型是非法的。所以我感到完全迷失了。 我知道这个理论: 如果我想将结构传递给函数,我需要使用指针。为了使用指针访问结构成员,我使用语法糖“箭头运算符“->”。它的意思是“*(p).x”。 那么它有什么问题呢?
几何.c
#include "complex.h"
#include "stdlib.h"
void complex_product(struct complex *comp1, struct complex *comp2) {
*comp1 = ((comp1->re * comp2->im) - (comp1->im * comp2->im)) + ((comp1->re * comp2->im) + (comp1->im * comp2->re));
}
几何.h
#if !defined COMPLEX_H
#define COMPLEX_H
struct complex {
double re, im;
};
extern void complex_product(struct complex* comp1, struct complex* comp2);
#endif
【问题讨论】:
-
请注意,C 原生支持 C99 中的复数。只需包含
complex.h -
是的,我知道,但这是我在大学时必须做的练习,所以我不能使用图书馆。我必须学习如何手动操作。等我学会了,就可以使用库了。
-
*comp = ((...) + (...));->*comp = (struct complex){ ..., ... }; -
最好用不同于
complex.h的名称来称呼您的标头,以避免与该名称的标准标头发生冲突