通过传递给函数的指针修改struct成员

时间:2012-05-09 09:14:22

标签: c pointers

例如这段代码:

struct test{
    int ID;
    bool start;
};

struct test * sTest;

void changePointer(struct test * t)
{
    t->ID = 3;
    t->start = false;    
}

int main(void)
{
    sTest->ID = 5;
    sTest->start = true;
    changePointer(sTest);
    return 0;
}

如果我要执行此代码,那么输出会是什么? (例如,如果我传递这样的指针,它是否会更改引用,还是只是副本?)

提前致谢!

3 个答案:

答案 0 :(得分:2)

你的程序没有任何输出,所以没有。

它也从不初始化sTest指针指向某个有效的内存,因此结果完全未定义。该程序调用未定义的行为,运行时应该/可能/可能崩溃。

IF 指针已初始化为指向struct test类型的有效对象,该结构的字段将被更改,以便在main()结束时,ID将为3. changePointer()内完成的更改与main()中所做的更改在同一内存中完成。

一个简单的解决方法是:

int main(void)
{
   struct test aTest;
   sTest = &aTest;    /* Notice the ampersand! */
   sTest->start = true;
   changePointer(sTest);

   return 0;
}

另请注意,C99之前的C没有true关键字。

答案 1 :(得分:0)

1)由于你没有为保存结构分配内存,你的代码会崩溃的第一件事......你可能需要添加

 sText  = malloc(sizeof(struct test));

2)纠正崩溃后,您可以传递结构指针,您在changePointer函数中所做的更改将反映在main和vizeversa中。

3)但是既然你没有打印任何东西,那么你的程序就不会有任何输出..

答案 2 :(得分:0)

唯一的问题是为什么在全局名称空间中需要测试指针?其次是你没有任何内存分配操作。并且您有一个指针作为您的函数的输入参数。因此,指向的结构将在“changePointer”中更改。