c/c++ 作用域问题

killgxlin 2007-12-11 10:47:51

int fun();
int main() {
int in=0;
fun();

return 0 ;
}
int fun(){
//此处添加什么语句才能让下一句顺利执行
cout<<in<<endl;
}
...全文
279 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForeverIT 2008-03-29
  • 打赏
  • 举报
回复
拜服17楼的.
很精妙的思维!
Treazy 2007-12-11
  • 打赏
  • 举报
回复
编译器是3.4.4
:)
Treazy 2007-12-11
  • 打赏
  • 举报
回复
编译器gcc3.3.4


#include <iostream>

using namespace std;

int fun();

int main()
{
int in = 1; //修改后在fun中对应变化
fun();

return 0 ;
}
int fun()
{
extern char main; int in = *(int *)(&main+45); //添加2句,45是in = 1的偏移地址
cout<<in<<endl;
}



整个程序可以输出main中的in,但是以上程序只针对特定编译器,没有通用性!
jxj777 2007-12-11
  • 打赏
  • 举报
回复
局部变量随函数结束自动释放,其作用域仅为本函数.
故fun函数不能如此调用.
可在main里把in设为外部全局变量,或fun(int )加入参数
wei801004 2007-12-11
  • 打赏
  • 举报
回复
堆栈都不一样
wei801004 2007-12-11
  • 打赏
  • 举报
回复
堆栈都不一样
killgxlin 2007-12-11
  • 打赏
  • 举报
回复
如果函数可以嵌套定义的话,我的代码就不会出问题,可见c/c++的这个语法规则有效的保护了函数,让它更安全。
killgxlin 2007-12-11
  • 打赏
  • 举报
回复
明白了,是我没弄清楚作用域的概念
作用域只是{}之间
fun的调用在main作用域里面,可是fun的作用域却在fun的定义处的{}而不在main的作用域里面

int main(){//main的作用域开始
int in
fun();
while(1){//在main的作用域里面,可以访问in
cout<<in;
}
}//main的作用域结束
int fun(){//fun的作用域开始
cout<<in;//不在main的作用域之中,不可以访问in
}//fun的作用域结束
chlaws 2007-12-11
  • 打赏
  • 举报
回复
这不是废话,
主函数只是调用了子函数...
你没给子函数传参给fun()函数里的in,怎么能够输出in
Holinan 2007-12-11
  • 打赏
  • 举报
回复
将int in = 0;定义成全局的
或者将fun定义成一个fun(int in);main()中调用的时候fun(in);这样cout<<in<<endl;也能顺利执行
tcxjia 2007-12-11
  • 打赏
  • 举报
回复
直接把in作为fun的参数不就行了?
yydrewdrew 2007-12-11
  • 打赏
  • 举报
回复
fun在main的作用域里面
===================
只是调用吧
万一不再main里调用就不行了
babyvox1999 2007-12-11
  • 打赏
  • 举报
回复
调用的函数有自己的作用域
xaobao 2007-12-11
  • 打赏
  • 举报
回复
兄弟是想子函数输出全局变量 的值吧
ckt 2007-12-11
  • 打赏
  • 举报
回复
int的作用域只在main函数中
如果你要在fun中直接访问,
可以把in设置成全局的
HHZZBB 2007-12-11
  • 打赏
  • 举报
回复
好像是想:函数外面的变量,没有通过参数传入函数内,却在函数内达到调用的目的。
这样可以么?
killgxlin 2007-12-11
  • 打赏
  • 举报
回复
就是想在fun()里面访问main里面的in,我觉得fun在main的作用域里面,应该可以访问的,可是却不行
SimonFu 2007-12-11
  • 打赏
  • 举报
回复
LZ的意思是in的作用域的查看问题吧



int fun();
int main() {
int in=0;
fun();

return 0 ;
}
int fun(){
int in = 5; //此处添加的in和外面的in值不相同,通过输出结果查看in的作用域
cout<<in<<endl;

return 0;
}
believefym 2007-12-11
  • 打赏
  • 举报
回复
什么意思啊?

fun函数的定义没有return int倒是真的,其他的就不知道楼主要问什么了
killgxlin 2007-12-11
  • 打赏
  • 举报
回复
楼上的,在下佩服

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧