【问题标题】:Hi, I have trouble using pointers嗨,我在使用指针时遇到问题
【发布时间】:2020-11-25 11:48:09
【问题描述】:

此 C 代码在 Codeblocks 中运行良好,但在其他环境中则不行。我认为 Codeblocks 会自动使用指针并修改代码

return (Result){sum, mean, var};

是否有任何建议可以修复代码以使用指针?感谢您阅读我的问题!

#include<stdio.h>
#define SIZE 6
typedef struct Result {
   float sum, mean, variance;
}Result;

Result Statistics(int a[]);

int main()
{
   int array[SIZE] = { 1,2,3,4,5,6 };
   Result result;
   result = Statistics(array);
   printf("Sum=%.2f\n", result.sum);
   printf("Mean=%.2f\n", result.mean);
   printf("Variance=%.2f\n", result.variance);
   return 0;
}


Result Statistics(int a[])
{

   float sum, mean, var, sum2, diff;
   int i;
   for (sum = 0, i = 0; i < SIZE; i++) {
      sum += (float)a[i];

   }
   mean = sum / SIZE;
   for (sum2 = 0, i = 0; i < SIZE; i++) {
      diff = (float)a[i] - mean;
      sum2 += diff * diff;
   }
   var = sum2 / SIZE;
   return (Result){sum, mean, var};
}

【问题讨论】:

  • C99 中引入了复合文字,您的代码似乎正确,确切的错误是什么? 我认为 Codeblocks 会自动使用指针并修改代码。 Codeblocks 是 IDE 而不是编译器,不,编译器不返回任何指针,它返回 Result 或者不编译(取决于您的版本)。
  • 感谢您的回复。我得到的错误是错误 C4576:带括号的类型后跟初始化列表是 Visual Studio 上的非标准显式类型转换语法。
  • 我会赌 1000 美元 :)
  • 检查这个:Compound literals in MSVC
  • 在回答更多信息请求时,编辑问题以提供信息。在 cmets 中回答不足。

标签: c


【解决方案1】:

您的编译器不支持标准 C。更改

return (Result){sum, mean, var};

到:

{
    Result temp = {sum, mean, var};
    return temp;
}

【讨论】:

  • 学究式地,它应该是{ Result ... return tmp; },因为 C90 不允许在块中间声明。
  • @Lundin:OP 的 Visual Studio 也不是 C90。不过还是加了。
  • 想一想,它可能根本就不是C,它们本来可以编译成C++的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
相关资源
最近更新 更多