码迷,mamicode.com
首页 > 其他好文 > 详细

05_变量属性

时间:2018-10-23 21:19:21      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:row   地址   stat   关键字   文件   技术分享   ble   border   情况   

变量属性

C语言定义变量属性的关键字主要有auto、register、static、extern

1、auto关键字

技术分享图片

2、register关键字

(1)register关键字指明将局部变量存储于寄存器中;
(2)register只是请求寄存器变量,并不一定能成功;
(3)register变量必须是CPU寄存器可以接受的值;
(4)不能用&运算符获取resister变量的地址;
(5)register不能作为全局变量,因为寄存器不能被一个变量一直占用;
技术分享图片

3、static关键字

技术分享图片
技术分享图片

4、extern关键字

技术分享图片

5、编写代码

(1)auto、register、static对比分析

#include <stdio.h>

int f1()
{
    int r = 0;

    r++;

    return r;
}
int f2()
{
    static int r = 0;

    r++;

    return r;
}
int main()
{
    auto int i = 0; // 显示声明 auto 属性,i 为栈变量
    auto int l = 1; // 显示声明 auto 属性,l 为栈变量
    static int k = 0; // 局部变量 k 的存储区位于静态区,作用域位于 main 中
    register int j = 0; // 向编译器申请将 j 存储于寄存器中

    printf("%p\n", &i);
    printf("%p\n", &l);
    printf("%p\n", &k);
    //printf("%p\n", &j); // error

    for(i=0; i<5; i++)
    {
        printf("%d\n", f1());
    }

    for(i=0; i<5; i++)
    {
        printf("%d\n", f2());
    }

    return 0;
}

输出结果为:
技术分享图片
(2)static和extern的使用

#include <stdio.h>

extern int g_i;

int main(void)
{
    printf("%d\n",g_i);
    return 0;
}

int g_i;

输出结果为:0
若把int g_i屏蔽,则

#include <stdio.h>

extern int g_i;

int main(void)
{
    printf("%d\n",g_i);
    return 0;
}

//int g_i;

输出结果为:
技术分享图片
同样的道理,当其他文件里的变量被static修饰了,extern关键字失去作用;
1.c

#include <stdio.h>

extern int g_i;

int main(void)
{
    printf("%d\n",g_i);
    return 0;
}

2.c

static int g_i;

输出结果同样会报错

若代码改为一下情况,则不会报错;
1.c

#include <stdio.h>

extern int getI();

int main()
{
    printf("%d\n", getI());

    return 0;
}

2.c

static int g_i;

int getI()
{
    return g_i;
}

输出结果为:0

6、小结

技术分享图片

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">





05_变量属性

标签:row   地址   stat   关键字   文件   技术分享   ble   border   情况   

原文地址:https://www.cnblogs.com/chen-ace/p/9838197.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!