【问题标题】:Dynamic Arrays and structs动态数组和结构
【发布时间】:2011-03-24 02:41:08
【问题描述】:

谢谢!我只需要将作业的右侧转换为 Term。

我必须创建一个多项式的动态数组,每个多项式都有一个动态的项数组。当给这个术语一个指数和系数时,我得到一个错误“'{'标记之前的预期表达式”。分配值时我做错了什么?

另外,有没有一种简单的方法来保持术语的动态数组按其指数排序?我只是计划循环,打印最大值,但更愿意按顺序存储它们。

谢谢!

polynomialArray[index].polynomialTerm[0] = {exponent, coefficient};  // ISSUE HERE

改成

polynomialArray[index].polynomialTerm[0] = (Term){exponent, coefficient};

【问题讨论】:

    标签: c c99


    【解决方案1】:
    polynomialArray[index].polynomialTerm[0]->exponent = exponent;
    polynomialArray[index].polynomialTerm[0]->coefficient = coefficient; 
    

    【讨论】:

      【解决方案2】:

      您的代码中存在效率问题:

        if(index > (sizeof(polynomialArray)/sizeof(Polynomial)))
            polynomialArray = (Polynomial*)realloc(polynomialArray, index * sizeof(Polynomial));
      

      因为 polynomialArray 是一个指针,我认为 sizeof(polynomialArray) 总是 4 或 8(64 位系统)。因此,只要 index 大于 0,上述 if 语句将始终为真。

      【讨论】:

      • 好收获。当且仅当X 是一个数组时,sizeof(X) 给出了原作者想要的答案。
      【解决方案3】:

      如果这是C99,我想你需要

      polynomialArray[index].polynomialTerm[0] = (Term){exponent, coefficient};
      

      【讨论】:

        【解决方案4】:

        您不能像这样对值进行属性化(仅在声明期间)。

        你应该这样分配:

        polynomialArray[index].polynomialTerm[0].exponent = exponent;
        polynomialArray[index].polynomialTerm[0].coefficient = coefficient;
        

        关于另一个问题,你真的不需要在这里断言。如果指针具有分配给它的值 malloc,则该指针不会为 NULL。如果没有,最好是NULL,这样可以测试malloc是否失败。

        要对其进行排序,您需要使用某种排序算法进行排序。我认为,如果您正在寻找一种简单的方法,那么您正在做的事情就很好。如果订购至关重要(如实时应用程序),那么您需要重新考虑该方法。如果没有,请继续前进!

        保重, 贝科

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-16
          • 1970-01-01
          • 2020-11-09
          • 2021-10-30
          • 2020-08-23
          • 2017-03-30
          • 2020-04-14
          • 2017-03-13
          相关资源
          最近更新 更多