这是到目前为止我遇到的任务的全部代码:
// This program takes a quadratic from the user, and prints the solution(s) if they exist.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <complex.h>
// Define quadratic structure
typedef struct quadratic{
float a, b, c;
float discriminant;
float real_root_1;
float real_root_2;
float complex_root;
} Quadratic;
// 'Redefine' malloc to also check allocation of memory when called, as suggested
void xmalloc(size_t n){
void *p = malloc(n);
if (p == NULL) {
printf("\n ERROR: Unable to allocate memory! \n");
exit(1);
}
return p;
}
// Following example code in lecture notes
Quadratic *newquadratic() {
Quadratic *q = xmalloc(sizeof *q);
return q;
}
int main () {
return 0;
}
现在我不太确定我在做什么,但我会在这个代码首先出现问题之后询问这个问题。在“Quadratic *q = xmalloc()”行上,我收到错误“Void value not ignored as it hould be”,但是这段代码基本上是从讲义中复制出来的,并且变量名称发生了变化!(正如我们被建议做的那样..)。我尝试删除 xmalloc 中的 void 标签,然后开始抱怨未定义的变量,所以我真的不确定发生了什么。
更一般地说,我对其中的某些部分感到困惑:即函数“Quadratic *newquadratic()”。怎么会有星星啊!?指针怎么可能是函数..?不仅如此,如果我去掉星号,似乎只有当我为返回加星号时一切都好,“return *p;”。看起来这个函数只能返回指针,但我将 Quadratic 定义为变量类型(结构),所以.. 为什么要返回指针而不是“二次”?