首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从函数返回值

从函数返回值
EN

Stack Overflow用户
提问于 2012-11-07 05:42:55
回答 4查看 201关注 0票数 1

我对c编程非常陌生。我已经写好了休眠代码

代码语言:javascript
复制
 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值保存在一个变量中,并将索引值保存在其他变量中,如。

代码语言:javascript
复制
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,如下所示。

代码语言:javascript
复制
typedef struct {
   float v;
   unsigned int p;
  }volphase;

我已经在头文件中声明了这个结构。我将这个头文件包含在我调用的所有文件中。

代码语言:javascript
复制
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时有任何错误,请给我建议。或者任何其他最简单的返回两个值的方法。

请教我怎么做。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-07 05:47:42

在返回多个值的两种方法中,从函数返回struct是最不常见的一种。更常见的是使用指针:

代码语言:javascript
复制
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); 
}

下面是调用此函数的方法:

代码语言:javascript
复制
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;
}
票数 3
EN

Stack Overflow用户

发布于 2012-11-07 05:58:12

我将从函数中返回阶段-函数名为MaxPhase,这意味着它返回最大阶段的值。可以使用指针返回找到最大值的索引。

请注意,未使用data值,并且未定义mux1。还要注意,我使用的是idx而不是index,因为后者有时已经在标准库中定义(尽管可能不在您的库中)。

代码语言:javascript
复制
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);

    ...
}
票数 1
EN

Stack Overflow用户

发布于 2012-11-07 05:58:32

代码语言:javascript
复制
#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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13259897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档