Chinaunix首页 | 论坛 | 博客
  • 博客访问: 446814
  • 博文数量: 89
  • 博客积分: 2713
  • 博客等级: 少校
  • 技术积分: 938
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-18 21:19
个人简介

为了成为自由自在的人而奋斗!

文章分类

全部博文(89)

文章存档

2016年(5)

2015年(9)

2014年(2)

2013年(10)

2012年(1)

2011年(30)

2010年(32)

分类: C/C++

2010-09-06 22:30:48

// 内联函数 静态变量
#include

static int c = 0;

_inline void prints(int b, int *d);

int main(void)
{
    static int b, d;

    b = 0;
    d = 0;
    prints(b, &d);
    prints(b, &d);
    prints(b, &d);
    
    return 0;
}
_inline void prints(int b,int *d)
{
    static int a;
    int i;

    i = 0;
    a++;
    (*(&b))++;
    c++;
    (*d)++;
    i++;

    printf("a = %d b = %d c = %d d = %d i = %d\n", a, b, c, *d, i);
    
}    
/*
输出结果:
a = 1 b = 1 c = 1 d = 1 i = 1
a = 2 b = 1 c = 2 d = 2 i = 1
a = 3 b = 1 c = 3 d = 3 i = 1
a = 4 b = 1 c = 4 d = 4 i = 1
*/
/*
从中可见,静态变量是在编译阶段就分配了内存。

多次调用内联函数,内联函数中的静态变量一直是用原来的那个地址空间,导致a持续增加。a在程序运行阶段一直存在着,而局部变量i则不然。

说内联函数就是define也不是,看编译器的处理,有时仅当普通函数处理,但有时类似define也不是define,如果直接用函数体内部代码代替函数调用,则会提示a重复定义。


另外 b和d区别仅在于按值传递和取地址传递。

还有一个就是静态变量初始化的话,值必须是确定的。
如: static int s = 12442;
而不能使用不定的值:
如: static int s = func(); func()函数返回一个整数或相关类型。

*/




阅读(2711) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~