例如这段代码:
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;
}
如果我要执行此代码,那么输出会是什么? (例如,如果我传递这样的指针,它是否会更改引用,还是只是副本?)
提前致谢!
答案 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”中更改。