c – 局部变量的地址
发布时间:2020-12-16 10:43:39 所属栏目:百科 来源:网络整理
导读:我很难理解这三者之间的区别: const char * f() { return "this is a test";}const char * g() { const char * str = "test again"; return str;}const double * h() { const double a = 2.718; return a;} 我收到警告h(),警告:返回本地变量’a’的地址.这
我很难理解这三者之间的区别:
const char * f() { return "this is a test"; } const char * g() { const char * str = "test again"; return str; } const double * h() { const double a = 2.718; return &a; } 我收到警告h(),警告:返回本地变量’a’的地址.这是有道理的,但我不明白为什么编译器(gcc -Wall)对f()和g()函数没问题. >那里没有局部变量吗? 解决方法
字符串文字不存储在本地堆栈帧中.它们位于可执行文件的固定位置.对比:
const char * g() { const char * p = "test again"; return p; } 同 const char * g() { const char a[] = "test again"; return a; } 在前者中,返回值指向可执行文件中的固定位置.在后者中,返回值指向堆栈中的(现在无效的位置). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |