游戏开发论坛

 找回密码
 立即注册
搜索
查看: 11867|回复: 19

在for循环中定义一个变量(例如 int BianLiang)这个变量是不

[复制链接]

36

主题

109

帖子

109

积分

注册会员

Rank: 2

积分
109
发表于 2005-9-21 21:34:00 | 显示全部楼层 |阅读模式
比如有一循环

void Function()
{
        for( int i=o;i<10;i++ )
       {
   
              int BianLiang;

              其他代码略.......................

        }


      函数的其他代码略................

}


我有两个疑问:

1.这个for循环在一个函数当中,在for中定义的int 型变量Bianliang只有在函数结束的时候才被系统自动释放,可是,因为for循环的关系,前一个BianLiang还没有释放,下一个BianLiang就又被定义了。这样岂不是重复定义变量了吗?为什么系统不报错?

2.这个BianLiang随着for循环定义了10次,那这10个BianLiang在内存的地址是一样的吗?





小弟还是菜鸟,请大家指教!

63

主题

871

帖子

891

积分

高级会员

Rank: 4

积分
891
QQ
发表于 2005-9-21 22:18:00 | 显示全部楼层

Re:在for循环中定义一个变量(例如 int BianLiang)这个变量是

明显不会,,局部变量应该在函数开头都分配好的

后面的只是在语法上进行作用域判断

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2005-9-22 00:34:00 | 显示全部楼层

Re:在for循环中定义一个变量(例如 int BianLiang)这个变量是

其实回答你的问题很简单,for的语法为
for(1;2;3) {}
第一部分为for的初始化部分,它只被运行一次,所以不会出现重复定义的问题,这是第一个问题;第二个问题,因为这个变量是在for的局部的定义的,所以在for的内部时它的内存地址是一样的,为啥呢?你想想,如果每次这个变量都变化的话,后面的2和3怎么执行呢,2和3有时是需要1的值的,如果1里面的变量的地址随便变化,2和3里的判断和增量运算如何运行呢!

36

主题

109

帖子

109

积分

注册会员

Rank: 2

积分
109
 楼主| 发表于 2005-9-22 07:51:00 | 显示全部楼层

Re:在for循环中定义一个变量(例如 int BianLiang)这个变量是

非常感谢三楼的回复,但是您好象没可能没仔细看我的问题,我问的是变量int BianLiang会不会重复,而不是for里面的判断变量int i,i当然只是定义一次了,问题是BianLiang这个变量。

36

主题

109

帖子

109

积分

注册会员

Rank: 2

积分
109
 楼主| 发表于 2005-9-22 12:00:00 | 显示全部楼层

Re:在for循环中定义一个变量(例如 int BianLiang)这个变量是

回复楼上的:

可是一个函数内定义的变量,只有这个函数执行结束的时候才会被自动释放啊!这个函数for循环了10次,只有这10次循环结束,函数才会结束,变量BianLiang才会被释放吧,可是这期间变量BianLiang已经被声明了10次了。

是不是为变量BianLiang分配了10次新的内存呢?

44

主题

156

帖子

162

积分

注册会员

Rank: 2

积分
162
发表于 2005-9-22 13:41:00 | 显示全部楼层

Re:在for循环中定义一个变量(例如 int BianLiang)这个变量是

这个BianLiang变量,,会被分配十次。他在for里面,所以出了for,这个变量就被注销了!

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2005-9-22 16:06:00 | 显示全部楼层

Re:在for循环中定义一个变量(例如 int BianLiang)这个变量是

难道是每一次循环释放一次 BianLiang ????

0

主题

16

帖子

41

积分

注册会员

Rank: 2

积分
41
发表于 2005-9-22 17:10:00 | 显示全部楼层

Re:在for循环中定义一个变量(例如 int BianLiang)这个变量是

在循环中的局部变量内存只会在当前函数的stack上被分配一次。在每一次循环开始时,变量的构造函数首先被调用,在当前一轮循环结束时,变量的析构函数将被调用,而变量内存将被重复使用。该变量内存将在当前函数退出时随stack清空而真正被回收注销。

2

主题

35

帖子

44

积分

注册会员

Rank: 2

积分
44
发表于 2005-9-22 17:25:00 | 显示全部楼层

Re:在for循环中定义一个变量(例如 int BianLiang)这个变量是

恩,调用函数的时候,会自动对堆栈进行处理。比如
push ebp
mov ebp,esp
sub esp ,10
这里的sub,就是为局部变量存储开辟了空间
所以说,看似循环会多次定义,但是经过优化,也只有一次,函数返回的时候,自动平衡
堆栈,就销毁了变量。

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2005-9-22 18:32:00 | 显示全部楼层

Re:在for循环中定义一个变量(例如 int BianLiang)这个变量是

如果没有编译器的优化的话,会定义十次
但现在的编译器都给你优化了,所以定义的次数只有一次..
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-28 01:27

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表