Nic*_*ick 4 c variables pointers
局部变量至少(最多)存在于函数内部.但是,块外的块范围变量会发生什么,但它具有相同的功能,我可以保留并使用它们的地址吗?这段代码有效吗?
#include <stdio.h>
int main()
{
char *f;
if (1)
{
char q[] = "123";
f = q;
}
printf ("%s\n", f);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
事实上gcc -ansi -pedantic
,valgrind和valgrind 都没有抱怨,但是我可以使用跨平台和交叉编译吗?在我看来没有,但是什么工具可以告诉我错误?
PS我应该用static
吗?它可能是适当的解决方案,但在我看来,它不是一个线程安全的?
你不能.具有自动存储持续时间的变量将其生命周期设置为封闭块.你最终得到的是一个悬空引用,使用它是未定义的行为.
对象的生命周期是程序执行的一部分,在此期间保证为其保留存储.一个对象存在,具有一个常量地址,33)并在其整个生命周期内保留其最后存储的值.34)如果一个对象在其生命周期之外被引用,则该行为是未定义的.当指针指向(或刚刚过去)的对象到达其生命周期的末尾时,指针的值变得不确定.
对于没有可变长度数组类型的此类对象(具有自动存储持续时间),其生命周期从条目延伸到与其关联的块,直到该块的执行以任何方式结束.