有人可以解释三元运算符在此代码中的作用吗?

时间:2013-07-23 01:11:58

标签: ternary-operator

我从"The Audio Programming Book"找到了这个示例C代码。

我基本上理解代码在做什么。它采用一系列值来表示一系列正弦波的振幅,并将它们相加以形成复杂的波。

除了读取行之外的所有内容我都很好:

a  = amps ?  amps[i] : 1.f; 

我知道三元运算符基本上是If / Else语句,但我似乎无法弄清楚这是做什么的,因为'amps'在代码中没有定义。放大器重复使用放大器[]是没有意义的,似乎这是不可能的。我也无法在其他任何地方找到与其匹配的示例。

但是代码会编译,所以我完全不知道它是什么错误,以及它究竟在做什么。

如果有人可以解释这是做什么[是传统的If / Else表格],我将不胜感激。

float* TableGEN::fourier_table(int harms, float *amps, int length, float phase)
{
   float a;
   float *table = new float[length+2];
   double w;
   phase *= (float)pi*2;  

   memset(table, 0, (length+2)*sizeof(float) );

   for(int i=0; i < harms; i++)
      for(int n=0; n < length+2; n++)
      {
           a  = amps ?  amps[i] : 1.f;     
           w = (i+1)*(n*2*pi/length);
           table[n] += (float) (a*cos(w+phase));
      }

   normalise_table(table, length , 1.0f );
   return table;
}

由于

斯坦

1 个答案:

答案 0 :(得分:1)

似乎正在检查amps是否为真和/或是否设置为某个东西,如果是,则抓住它的给定索引,否则返回1的浮点数。

所以

if (amps)
{
   a = amps[i];
}
else
{
   a = 1.f;
}

说实话,这是多么奇怪/奇怪。它应该检查是否设置了amps[i],然后抓住它。如果没有,则默认为1.f