繁体   English   中英

在C中的struct中初始化int数组

[英]Initialize int array in struct in C

我写了一种类型:

typedef struct
{
  int Tape[TAPE_SIZE];
  int *Head;
  int Tape_Count;
  int Loop_Start_Count;
} Tarpit;

我尝试使用以下函数初始化此类型:

void Tarpit_Initialize(Tarpit Tarpit)
{
  Tarpit.Tape_Count = 0;
  Tarpit.Loop_Start_Count = 0;

  int Index;
  for(Index = 0; Index < TAPE_SIZE; Index++)
    {
      Tarpit.Tape[Index] = INITIAL_SIZE;
    }
 }

但是,它似乎不起作用。 如果我运行此命令:

Tarpit Foo;

Tarpit_Initialize(Foo);
printf("Tarpit Initialization Test: \n");

int index;
for(index = 0; index < TAPE_SIZE ; index++)
  {
    if(Foo.Tape[index] == INITIAL_SIZE)
      {
        printf("%d: %d \n", index, Foo.Tape[index]);
      }
    else
      {
        printf("%d: %d !ERROR \n", index, Foo.Tape[index]);
      }
  }

我得到几个非零值(我将#define TAPE_SIZE 10000和#define INITIAL_SIZE 0设置为零)

此外,如果我在不运行Tarpit_Initialize(Foo)的情况下运行测试, 则会得到完全相同的结果。 初始化程序似乎无效。 为什么/如何以其他方式实现它? 我想将Foo.Tape的每个元素设置为零。

问题解决了!

您正在按值传递Tarpit:

void Tape_Initialize(Tarpit Tarpit)

这意味着它只是Tarpit的副本。 您必须将指针传递给它,才能对其进行修改。

void Tape_Initialize(Tarpit* Tarpit)

并将其作为指针传递(注意所调用函数的名称!):

Tape_Initialize(&Foo);

并使用->运算符对其进行修改。 例如:

Tarpit->Tape_Count = 0;

而且,正如“ Elias Van Ootegem”指出的那样,您不应使用sizeof(Tarpit.Tape)来获取数组的大小,而应使用定义的TAPE_LENGTH 因为sizeof()会以字节为单位而不是元素来提供大小。

您是否检查了您正在调用的功能?

其“ Tarpit_Initialize(Foo);”

但是函数u正在使用它来初始化“ void Tape_Initialize(Tarpit Tarpit)”。

我认为,即使您已实施,也应能正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM