| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1089 人关注过本帖
标题:循环变量销毁问题,纠结
只看楼主 加入收藏
narutosusdo
Rank: 2
等 级:论坛游民
帖 子:45
专家分:25
注 册:2011-5-30
结帖率:70%
收藏
已结贴  问题点数:20 回复次数:9 
循环变量销毁问题,纠结
比如一个循环
for(::){
    int i=9;
}如果每次循环不销毁i,那么第二次循环的i=9不是就重复定义了i吗?
但是如果要销毁
int kk=9;
for(::){
    int *i=(int *)malloc(sizeof(int));
}中每次循环后malloc产生的空间还在吗?如果在,那i会被销毁,而空间还在,那这个没有指针的空间不是也没有任何价值吗?

搜索更多相关主题的帖子: 价值 空间 
2013-08-23 12:59
awisebird_
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:82
专家分:185
注 册:2013-7-6
收藏
得分:10 
对于第一个问题:
不存在重复定义,编译器会处理为类似语句
int i=9;
for(::){
    i=9;
}//循环中重复赋值

第二个问题:编译器处理为
int *i;
for(::){
    i=(int *)malloc(sizeof(int));
}//每次进入循环分配的空间不一样,i的值发生变化,前一次的值被覆盖
可以用以下程序验证:
程序代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int i=0;
    int *k=NULL;
    for(i=0;i<3;i++)
    {
        k=(int *)malloc(sizeof(int));
        printf("%p\n",k);
    }
    return 0;
}
2013-08-23 17:48
jg658237
Rank: 7Rank: 7Rank: 7
来 自:青藏高原
等 级:黑侠
帖 子:224
专家分:529
注 册:2013-8-8
收藏
得分:0 
完全赞同二楼.

武功再高也怕菜刀.
2013-08-24 10:34
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:0 
有谁去真正探讨过for(;;;)为什么可以无限循环呢。

Go Go Go
2013-08-24 10:45
holy__shit
Rank: 2
等 级:论坛游民
帖 子:21
专家分:55
注 册:2013-8-23
收藏
得分:0 
回复 4楼 zhaoya881010
for是否继续进行的条件,关键在于表达式2
for(; ;) ; 当表达式2什么也不写时,默认为真

羁绊太多,只会迷失自我!
2013-08-24 19:13
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
靠,第一个循环是栈里的...
第二个循环是堆里的...
你居然混在一起问...很奇葩,很奇葩...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-08-24 19:28
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:0 
回复 5楼 holy__shit
能给我们详细解释下吗?为什么默认是真,有没有真正调试看下怎么执行呢?

Go Go Go
2013-08-25 18:41
holy__shit
Rank: 2
等 级:论坛游民
帖 子:21
专家分:55
注 册:2013-8-23
收藏
得分:0 
回复 7楼 zhaoya881010
如果你问的汇编层面上的我就不知道了!不过这个问题还是提得蛮有意思的!

羁绊太多,只会迷失自我!
2013-08-25 19:49
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:10 
第一个int i=9 。他在语句块内部,那么这就是一个局部变量,并且生存在栈内存,他的作用于是在整个语句块,而不是一条循环中. 当循环结束之后才会被销毁。而i=9 仅仅是赋值而已
而第二个,是处于堆内存,是不会销毁的。所以每次都是更新i值

C++菜鸟
2013-08-25 21:09
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:0 
这个问题回答的有点蛋疼。不过你问这个问题的目的何在?

局部变量编译器替你搞定,堆上申请的你自己理解的对着呢,你重新赋值,但是申请的内存还在,而且
编译器处理的时候为了方便,会对符号进行优化,不存在局部变量释放的问题

你应该把时间放在真正值得研究的地方,如果编译器不帮你处理这些,编程还不把人麻烦死。

这个问题不是一两句能说清楚的,算了,不扯了

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2013-08-26 14:19
快速回复:循环变量销毁问题,纠结
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015205 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved