如何将全0设置为通过结构(C)声明的数组?

时间:2018-11-28 22:43:53

标签: c arrays struct

当我从事C编程练习时,发现了一个带有结构数组的问题。 特别是,我将编写一个程序以使用不同的多项式进行运算。所以我声明了一个结构“ Pol”,其中包含变量“ order”和数组“ coefficients”。 然后,我将使用多项式进行soe运算(例如,它们中的两个之和)。 问题在于如何在结构中声明数组“系数”,因为当我想对两个多项式求和时,我想将数组的所有元素都设置为0(以解决关于两个具有不同阶数的多项式之和的问题)。 我知道如何在主函数中声明的数组中设置0(将单个值设置为0,然后将所有其他值自动设置为0)。 但是如何对结构进行相同操作?

在此先感谢所有将帮助我的人。

我在下面公开了代码(未完成):

#include <stdio.h>
#include <math.h>

#define N_MAX 100

typedef struct
{
  float coefficients[N_MAX];
  int order;
} Pol;

void println(int n);
void readPol(Pol* pol);

int main(int argc, char const *argv[])
{
  Pol p1, p2, pS;

  readPol(&p1);
  return 0;
}

void readPol(Pol* pol)
{
  printf("Polynomial order: ");
  scanf("%d", &pol->order);
  println(1);

  for(int i = pol->order; i >= 0; i--)
    {
      printf("Coefficient of x^[%d]: ", i);
      scanf("%f", &pol->coefficients[i]);
    }
}

void println(int n)
{
  for(; n > 0; n--)
    printf("\n");
}

3 个答案:

答案 0 :(得分:2)

初始化结构的语法类似于数组的初始化方式。您可以按顺序指定初始化程序,并在所有嵌套的初始化程序周围加上花括号:

Pol p1 = { { 0 }, 0 };

答案 1 :(得分:2)

  

...想要将数组的所有元素设置为0

要初始化(在声明时分配),请选择各种选择。

Pol pol1 = { .order = 0, .coefficients = { 0 } };    // Declare members in desired order
Pol pol2 = { .coefficients = { 0 }, .order = 0 };
Pol pol3 = { .order = 0, .coefficients = { 0.0f } }; // A float constant for clarity
Pol pol4 = { { 0.0f }, 0 };                          // Order matches declaration 
Pol pol5 = { 0 };                                    // All set to 0

请注意,对于部分显式初始化器,其余成员/数组元素将获得0值。 (对于整数类型,为0;对于FP,类型为0.0;对于指针类型,某些 null指针。)

在C语言中,没有部分初始化,全部或全部没有。


分配,直接的解决方案是使用循环。

pol->order = 0;
for(i = 0; i < N_MAX; i++) {
  pol->coefficients[i] = 0.0f;
}

但是为什么呢?所有代码需求都是

pol->order = 0;
pol->coefficients[0] = 0.0f;

拥有.order成员的目的是将工作扩展到已使用的数组大小,以及在readPol(Pol* pol)println(int n)中完成的工作。不要花时间分配未使用的数组成员。

答案 2 :(得分:-1)

您可以使用memset初始化变量的每个字节。

memset(&p1, 0, sizeof(Pol))