| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 636 人关注过本帖
标题:有关register变量和static变量的区别和联系
只看楼主 加入收藏
Aamir
Rank: 2
来 自:厦门
等 级:论坛游民
帖 子:18
专家分:30
注 册:2011-2-23
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:4 
有关register变量和static变量的区别和联系
题目:输出1到5的阶乘
    用static变量的情况:

#include<stdio.h>
void main()
{
    long fac(long);
    long i;
    for(i=1;i<=5;i++)
        printf("%ld!=%ld\n",i,fac(i));
}

long fac(long n)
{
  static long f=1;
        f=f*n;
    return(f);

}

   可以得到正确结果

用register变量
#include<stdio.h>
void main()
{
    long fac(long);
    long i;
    for(i=1;i<=5;i++)
        printf("%ld!=%ld\n",i,fac(i));
}

long fac(long n)
{
  register long f=1;
        f=f*n;
    return(f);

}
  不能得到正确结果


问题:如果说,register和static的区别仅在于register是寄存器变量,可以提高运行效率。那么,既然作为寄存器变量的register,为什么不能替代static,毕竟他俩都是存取变量,只不过存取变量的地方不同而已?麻烦大家看看,谢谢。
搜索更多相关主题的帖子: return 
2011-04-05 12:25
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:5 
书里说这个register有很多限制,第一并不确定放在寄存器里,第一根据实现不同,对于能声明的变量类型有各种限制,第三不能取该类型变量的地址,第四当进入含有次变量的语句块时执行初始化操作,没有默认值。
我觉得问题或许出在上述第四点。 static的初始化值为0.

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-05 12:39
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:5 
long fac(long n)
{
  static long f=1;  //静态变量,只有第一次使用的时候f初始化为1(以后不赋值为1),以后保留上次调用后的值,相 当  //于   此句只在第一次使用时才调用的
        f=f*n;  
    return(f);
}
long fac(long n)
{
  register long f=1; //寄存器变量,只是对使用非常频繁的变量才如此定义的。每次调用fac()时f都初始化为1
        f=f*n;
    return(f);
}


   唯实惟新 至诚致志
2011-04-05 12:50
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
寄存器变量我还真不太懂  只知道频繁使用的定义成寄存器   

呵呵   楼上的  学习了

                                         
===========深入<----------------->浅出============
2011-04-05 13:36
Aamir
Rank: 2
来 自:厦门
等 级:论坛游民
帖 子:18
专家分:30
注 册:2011-2-23
收藏
得分:0 
回复 2楼 ansic
谢谢
2011-04-05 16:34
快速回复:有关register变量和static变量的区别和联系
数据加载中...
 
   



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

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