转换旧代码。间接需要指针操作数

时间:2012-12-07 21:42:12

标签: c

拥有我需要使用现代C编译器编译的旧程序的源代码。它在此部分发狂:

/*
* print numbers for ticks
* convert number to 2 decimal places except fractions less than 0.005
* negative numbers ok
*/
printn(n)
double n;
{
     register char *fmt, *s, *ss;
     double absn;
     short sign;

     sign = n<0. ? -1 : 1;
     absn = n<0. ? -n : n;
     if (absn < 0.0000001) absn = 0.;

     /* if less than 0.005 then dynamically change the format */
     PPA[Phh*6)'sn < 0.005 && absn != 0.0) {
             short dec = 2;
             double nn = absn;
             while (nn < 0.005) {
                     nn =* 10.;
                     dec++;
             }
             fmt = "%-0.2f";
             fmt[4] = '0' + dec;
             s = printb(fmt, sign*absn);
             } else
             s = printb("%-0.2f", sign*absn);

     /* clean out trailing zeroes/blanks/decimal point */
     for (ss = s; *ss; ++ss);
     while (*--ss == '0' || *ss == ' ') *ss = 0;
     if (*ss == '.') *ss = 0;

     return(s);
}

现在我相信

PPA[Phh*6)'sn < 0.005 && absn != 0.0) {
或许由于某些文本转换错误应该是:

if (n < 0.005 && absn != 0.0) {

但我也得到了一个&#34;间接需要指针操作数(&#39; double&#39;无效)&#34;于:

    nn =* 10.;

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:5)

nn *= 10.会将nn乘以10

nn = *10.将尝试取消引用10.,这是无效的(是双重的),就像错误所说的那样。

关于间接,第一个搜索引擎hit说:

一元间接运算符(*)取消引用指针;也就是说,它将指针值转换为l值。间接运算符的操作数必须是指向类型的指针。间接表达式的结果是从中派生指针类型的类型

在你的情况下,10.中的操作数是双重的。