标题:auto 与static
只看楼主
suifengjita
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-10-12
 问题点数:0 回复次数:7 
auto 与static
有没有人能详细讲一下auto和static的区别呢?
搜索更多相关主题的帖子: auto static 
2006-11-20 12:45
smartwind
Rank: 1
等 级:新手上路
威 望:1
帖 子:277
专家分:0
注 册:2006-11-13
得分:0 
static是静态变量,也就是说无论函数(或此源文件)调用多少次,都只为此变量申请一次空间(同时也只赋一次初值).
一般的变量就是省略了auto的.
举个例子:
f()
{
static int i=0;
auto int j=0; //auto可省略
i++;j++;
printf("%d %d\n",i,j);
}
main()
{
f();f();f();
}
自己看结果就知道了

2006-11-20 12:53
hejing1109
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-9-27
得分:0 

同意


2006-11-21 03:50
财鸟
Rank: 1
等 级:新手上路
帖 子:132
专家分:0
注 册:2006-11-2
得分:0 

我靠
空间那章你没学过呀!!!!!!!!!
一个是随意的!!!!!!!
一个是静态空间!!!!!!!!!!!!
后者申请了要语句释放!!!!!!!!!!
前者在执行时自动申请和释放!!!!!!!!!!!!

2006-11-21 12:58
ChenMo
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:481
专家分:10
注 册:2004-4-8
得分:0 

内存分配一般有三种。
第一是静态内存分配,在编写程序时,使用 static 修饰符声明某变量为静态变量,并且应该为其赋缺省值;
静态内存的分配在编译时便已确定下来,而且是编译器自动分配。
除了寄存器(现在几乎不用)及静态声明外,其余的局部变量(全局变量是静态声明的)默认为动态(auto)声明。

第二种是栈内存的分配,C语言调用函数时(C是函数式的语言)为当前的函数调用分配栈内存,维护当前的函数调用的局部变量(参数属于局部变量的一个范畴),这也是编译器为程序赋予的一个功能,我们无须手动干预。

第三种是堆内存,由我们在需要时手动分配(使用 malloc() 函数),并且必须手动释放(使用 free() 函数)。堆内存的生命周期不随函数作用域等限制,并且即使整个程序已退出执行,因为这块内存受管理于操作系统。所以,必须在该内存不再使用时使用 free() 释放这块空间。

[此贴子已经被作者于2006-11-21 13:45:23编辑过]


欢迎加入 MVC 技术讨论群(新群:90093426)
2006-11-21 13:43
ziyi555
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2006-11-4
得分:0 

哥们听老师讲课然后加自己的理解:
auto 变量 :自动存储类 一般不表明什么类的就属于这一类
自动变量申明后在内存开一空间,使用完后次空间在内存释放掉
下一次再使用此变量时 内存从新开辟空间
static变量 :静态变量 声明后除非初始化除0以外的值 否则默认初始化为0
静态变量在内存只开一次空间 直到程序结束才会释放掉因此生命周期比较长
下一次再使用此变量时 存在一个值为上次使用后的值
还有寄存器变量,一般为使用频繁的变量,存在离cpu较近的寄存器。名字也因此得来,好象是这样的,老师讲过
汗..还有全局变量,全局静态变量...不说这个咯


放手一博
2006-11-21 20:40
suifengjita
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-10-12
得分:0 
谢谢各位
2006-11-21 21:10
zxd198778
Rank: 1
等 级:新手上路
帖 子:99
专家分:0
注 册:2006-7-30
得分:0 

我也学到了


我一个不懂世事的人,希望能在这里学到我想学的一些东西。
2006-11-21 21:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-104179-1-1.html




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

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