c - 从函数返回值

标签 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); 
} 

以上代码完美运行并打印最大电压和索引。我想从此函数返回值“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/

相关文章:

c - 如何制作可以运行 x86 十六进制代码的 C 程序

c - 在 c-99 中使用快速排序

C 文件看不到包含文件中声明的变量

不重复的字符串组合 C

c - "expected identifier or ‘(’ 之前 ‘[’ token "and "错误 : expected ‘)’ before ‘A’ "

c - 在出错的情况下从返回结构类型的函数返回什么?

c - 在 C 的哪些版本中,括号内的 block 用于返回有效值?

c - 链接器没有显示任何错误,很奇怪

c - 如何将 `SInt16' 转换为 `double'?

c++ - 为什么 i += a[i]++ 在使用 Visual C++ 递增 a[i] 之前分配 i?