0

例如这段代码:

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;
}

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

提前致谢!

4

3 回答 3

2

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

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

如果指针已被初始化为指向类型的有效对象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关键字。

于 2012-05-09T09:17:57.903 回答
0

1)首先你的代码会崩溃,因为你没有分配内存来保存结构..你可能需要添加

 sText  = malloc(sizeof(struct test));

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

3)但是由于您没有打印任何内容,因此您的程序不会有任何输出..

于 2012-05-09T09:18:22.200 回答
0

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

于 2012-05-09T09:21:10.450 回答