我对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”,我必须将Max值保存在一个变量中,并将索引值保存在其他变量中,如。
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和index value,因此我想将这两个值存储在不同的变量中。
我知道函数不能返回两个值。
我找过了,我发现可以用一个结构体,或者让函数用指针来处理参数。我尝试使用struct,如下所示。
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)中调用这个"struct“,以及如何将vp.v存储在一个变量中,将vp.p存储在另一个变量中。
如果在编写struct时有任何错误,请给我建议。或者任何其他最简单的返回两个值的方法。
请教我怎么做。
发布于 2012-11-07 05:47:42
在返回多个值的两种方法中,从函数返回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;
}发布于 2012-11-07 05:58:12
我将从函数中返回阶段-函数名为MaxPhase,这意味着它返回最大阶段的值。可以使用指针返回找到最大值的索引。
请注意,未使用data值,并且未定义mux1。还要注意,我使用的是idx而不是index,因为后者有时已经在标准库中定义(尽管可能不在您的库中)。
float MaxPhase(int * maxindex)
{
float max = 0.0;
int idx = -1;
for (int i=0; i<=360; i++) {
phaseset(i);
unsigned int data = readvalue();
float value = voltage(mux1);
if (value > max) {
max = value;
idx = i;
}
}
*maxindex = idx;
return max;
}
void caller(void)
{
int idx = 0;
float phase = MaxPhase(&idx);
printf("Max Voltage Value:%f\n", phase);
printf("Related index Value:%d\n", idx);
...
}发布于 2012-11-07 05:58:32
#include <stdio.h>
struct lol
{
float val;
int ind;
};
void olol(struct lol *lol1)
{
lol1->val = 5;
lol1->ind = 3;
}
int main(void) {
struct lol mylol = {0,0};
olol(&mylol);
printf("lololol %f %d \n", mylol.val, mylol.ind);
printf("lol\n");
return 0;
}https://stackoverflow.com/questions/13259897
复制相似问题