| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2231 人关注过本帖
标题:变量在什么时候真正分配空间?
只看楼主 加入收藏
Cking
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-9-23
收藏
 问题点数:0 回复次数:4 
变量在什么时候真正分配空间?
各位朋友好,我对C的运行机制一直很不理解,所以想请教几个基本的问题。

1 全局变量和静态变量在是不是编译时就已经占用开辟的空间了?如果有初始化,是不是已经开始赋值了?

2 动态变量(局部和形参)在什么时候占用开辟的空间?如果有初始化,那是不是在编译时就赋值了?

3 我在一本参考书上了解数组不能动态分配空间,在编译时就必须确定元素个数,那这个和C++里用 NEW动态分配数组空间冲突吗?具体如下:
class string {
char * contents;
int size;
public:
string(int sz)
{
contents = new char[sz];//注1
}
~string(){delect contents;}
};
main()
{
string s1(10);
string s2(20);
s1=s2;
return 1;
}
注1要动态的分配空间,形参变量 sz 只能在程序运行时才能确定呀,但是数组在编译时就要确定大小?
难道编译时,s1(10)已经把执行 sz=10? 但是这是编译阶段,怎么会执行程序呢?


以上3个问题实在把握难住了,请前辈指点!小弟先行谢谢啊!

[此贴子已经被作者于2007-9-23 14:42:47编辑过]

搜索更多相关主题的帖子: 变量 空间 动态 赋值 
2007-09-23 14:40
sunyuantz
Rank: 1
等 级:新手上路
威 望:1
帖 子:407
专家分:0
注 册:2006-3-20
收藏
得分:0 

不太清楚,我回去查书,不过根据java经验看new应该并没有分配空间,只是一个引用!


我不是名人,所以不要签名。等哪天我成名人了......你都认识我了还要签名干嘛!
2007-09-23 14:49
Cking
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-9-23
收藏
得分:0 
以下是引用sunyuantz在2007-9-23 14:49:10的发言:

不太清楚,我回去查书,不过根据java经验看new应该并没有分配空间,只是一个引用!

谢谢朋友阅帖,我在网上搜了一会,看到的也是比较模糊的论断,这个论坛也是搜的时候碰到的,所以进来碰碰运气。


2007-09-23 14:55
Cking
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-9-23
收藏
得分:0 

那位大侠能兄弟解释一下啊?
谢谢啊!


2007-09-26 16:19
偑色幻想
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2007-9-12
收藏
得分:0 

1 全局变量和静态变量在是不是编译时就已经占用开辟的空间了?如果有初始化,是不是已经开始赋值了?

2 动态变量(局部和形参)在什么时候占用开辟的空间?如果有初始化,那是不是在编译时就赋值了?

3 我在一本参考书上了解数组不能动态分配空间,在编译时就必须确定元素个数,

只能回答这么多.JAVA/C++没学过.

1.全局变量和静态变量都是在你声明的时候就开辟了储存空间.这也就是全局变量在提前声明了之后之后随时都可以用.在中间声明也就是在声明处开始.可以随便使用.
2.形参是在使用的时候才开辟了使用的空间.声明只不过是给编译器说明这个是什么样的类型.当实参把数值传给形参之后他才会有储存的空间.但是当使用完函数的同时随即释放.局部的也是.当本函数运行完毕后随即释放.
如果有初始化的话那要分别看待了.如果是非0值.那么他因自己的类型而获得储存空间.但是如果是0值的时候那他只是声明了类型.而值只是NULL.所以没有实际的储存空间.
3.数组不可以动态的分配空间.因为一个数组可以储存的元素个数是必须固定的.因为一个数组的储存是一个连续的储存地址.这样才有了指针的存在.如果是动态的话.那么他的储存将不会固定.指针的使用将会不确定.



PS:编程新手.如有不对.还请指出.

2007-09-26 16:48
快速回复:变量在什么时候真正分配空间?
数据加载中...
 
   



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

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