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

标签 c arrays struct initialization

我写了一个类型:

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() 会给你一个字节大小而不是元素大小。

关于c - 在 C 中初始化 struct 中的 int 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24676728/

相关文章:

c - 带有命令行参数的 Makefile

arrays - 如何查找并提取出现在括号之间的所有单词?

arrays - 在 STArrays 列表上映射 runSTArray?

Gonum 在使用嵌入式结构时抛出坏区 panic

c - GDB:使用 2 个命令运行

c++ - PC与Arduino串口通信

c - 如何对使用结构的指针数组进行排序?

c++ - 将矩阵字段设置为 Matlab 结构

c - 从文件中读取并使用指针将数据放入动态结构中

c - 为什么 open() 使用错误的权限创建我的文件?