从函数返回值

时间:2012-11-06 21:42:55

标签: c

我是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); 
} 

以上代码完美运行并打印最大电压和指数。我想要返回两个值&#34; Max&#34;和&#34;索引&#34;从这个函数,我必须将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和索引值,因此我想将这两个值存储在不同的变量中。

我知道函数不能返回两个值。

我已经搜索过,我发现有可能使用struct或者使用函数来处理带有指针的参数。我尝试使用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;
  } 

这是用&#34; bvr.c&#34;文件。  但我在想如何称呼这个&#34; struct&#34;如果&#39; 1&#39;(main.c)以及如何将vp.v存储在一个变量中,将vp.p存储在另一个变量中。

如果写struct有任何问题,请建议我。或任何其他最简单的方法,将返回两个值。

请帮我解决这个问题。

4 个答案:

答案 0 :(得分:3)

从函数返回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;
}

答案 1 :(得分:1)

我会从函数返回阶段 - 函数名称是MaxPhase,这意味着它返回一个最大阶段的值。可以使用指针返回找到max的索引。

请注意,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);

    ...
}

答案 2 :(得分:1)

#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;
}

答案 3 :(得分:0)

您可以通过以下几种方式解决此问题:

1.定义包含两个值的结构并返回该结构。

#include <stdlib.h>
struct Values {
  int v1, v2;
};
struct Values *get2Values () {
  struct Values *x=(struct Values*)malloc (sizeof (struct Values));
  x->v1=1;
  x->v2=1231;
  return x;
}

瞧,如果你没有正确处理返回的值,你就会有内存泄漏......

2.使用指针作为值的参数,例如 指针:

void get2Values (int *v1, int *v2) {
  *v1=1;
  *v2=131231;
 }
 int main () {
   int a1, a2;
   get2Values (&a1, &a2);
 }
祝你好运!