我写了一个类型:
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 的每个元素设置为零。
问题解决了!
答案 0 :(得分:8)
您按价值传递Tarpit:
void Tape_Initialize(Tarpit Tarpit)
这意味着它只是Tarpit的副本。您必须将指针传递给它才能修改它。
void Tape_Initialize(Tarpit* Tarpit)
并将其作为指针传递(注意名为!的函数名称):
Tape_Initialize(&Foo);
并使用 - &gt;运营商来修改它。例如:
Tarpit->Tape_Count = 0;
此外,作为&#34; Elias Van Ootegem&#34;指出,您不应该使用sizeof(Tarpit.Tape)
来获取数组的大小,而是使用您定义的TAPE_LENGTH
。因为sizeof()
会给你一个字节大小而不是元素。
答案 1 :(得分:0)
你检查过你正在调用的函数吗?
它的&#34; Tarpit_Initialize(Foo);&#34;
但是你正在使用它来初始化&#34; void Tape_Initialize(Tarpit Tarpit)&#34;。
我认为即使你实施的内容也应该可行。