我是 C 编程的新手。我已经写了休闲代码
float value; //golbal variable
unsigned int data; //golbal variable
void Maxphase(void)
{
float MAX = 0.0;
unsigned int i,index;
for (i=0;i<=360;i++)
{
phaseset(i);
data = readvalue();
value = voltage(data);
if(value>MAX) //find max value
{
MAX = value; //max voltage
index = i;
}
}
printf("Max Voltage Value:%f\r\n", MAX);
printf("Related index Value:%d\r\n", index);
}
以上代码完美运行并打印最大电压和索引。我想从此函数返回值“Max”和“index”,我必须将最大值保存在一个变量中,将索引值保存在其他变量中。
void runCom(void){
c=getchar();
switch(c){
case '1':
Maxphase();
Vin= (I want to store MAX value of that function)
p1= ( I want to store Index of that function)
break;
default:
break;
}
}
实际上我想调用那个函数,它必须返回两个变量 MAX 和索引值,因此我想将这两个值存储在不同的变量中。
我知道函数不能返回两个值。
我已经搜索过,我发现可以使用结构或使函数来处理带有指针的参数。我尝试使用如下所示的结构。
typedef struct {
float v;
unsigned int p;
}volphase;
我已经在头文件中声明了这个结构。我将这个头文件包含在我调用的所有文件中。
volphase Maxphase()
{
volphase vp;
float MAX = 0.0;
unsigned int i,index;
for (i=0;i<=360;i++)
{
phaseset(i);
data = readvalue();
value = voltage(data);
if(value>MAX) //find max value
{
MAX = value; //max voltage
index = i;
}
}
vp.v=MAX;
vp.p=index;
return vp;
}
这是写在“bvr.c”文件中的。 但我在考虑如何在 case'1'(main.c) 中调用此“结构”,以及如何将 vp.v 存储在一个变量中,将 vp.p 存储在另一个变量中。
如果在编写 struct 时有任何错误,请提出建议。或任何其他将返回两个值的最简单方法。
请帮助我如何做到这一点。
最佳答案
从函数返回一个 struct
是两种返回多个值的方法中最不常见的一种。使用指针更为常见:
void Maxphase(float *max, unsigned int *index)
{
*max = 0.0;
float value;
unsigned int i, data;
for (i=0;i<=360;i++)
{
phaseset(i);
data = readvalue();
value = voltage(mux1);
if(value > *max) //find max value
{
*max = value; //max voltage
*index = i;
}
}
printf("Max Voltage Value:%f\r\n", *max);
printf("Related index Value:%d\r\n", *index);
}
这里是你如何调用这个函数:
int main() {
float max;
unsigned idx;
Maxphase(&max, &idx);
printf("Max Voltage Value:%f\r\n", max);
printf("Related index Value:%d\r\n", idx);
return 0;
}
关于c - 从函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13259897/