- 论坛徽章:
- 5
|
回复 9# myworkstation
嗯。。让我想想。。我觉得是这样的。。如果一个函数类似这样
- struct g { char a[6]; };//声明没定义。
- struct g ff(void) {
- struct g r= { "test" };
- return r;
- }
- int main()
- {
- printf ("%s", ff().a);
- return 0;
- }
复制代码 在这段代码当中,g是一个局部变量,存在一个address当中,在返回的时候,函数仅仅传回g这个struct的指针,在调用printf之前这段时间里,程序不能保证g这块空间有没有被释放掉,这种情况下是未定义的,而现在lz的程序是g前面等于加上了一个static,等于那些值有了固定的地点存放,不会被释放,所以这种情况不是未定义的。
相当于。
- struct g { char a[6]; };//声明没定义。
- struct g ff(void) {
- struct g r= { "test" };
- return r;
- }
- int main()
- {
- struct g r = ff();//有了固定的存放点。
- printf ("%s", r.a);
- return 0;
- }
复制代码 |
|