c语言回顾5--变量属性

1.变量的属性:定义变量时,加上属性关键字

2.属性关键字指名变量特有意义

使用语法

#include<stdio.h>

int main()

{

    auto char i;

    register int j;

    static long k;

    extern double m;

 

    return 0;

}

 

3.关键字的分类:

(1)Auto关键字:auto是c语言中局部变量的默认属性,存储在栈上。

示例:

#include<stdio.h>

int main()

{

    int i;//局部变量默认属性为auto

    auto int j;//声明auto属性

    return 0;

}

 

(2)register关键字:将局部变量存储于寄存器中,即为寄存器变量。

1)为什么要用寄存器变量:寄存器比内存速度要快的多多多。

2)Register只是请求寄存器变量,但不一定请求成功(寄存器有限)。

3)不能用&云算法获取register变量的地址,&只能获得内存的地址,不能获得寄存器的地址

例:

#include<stdio.h>

register int g_v;//错误,在intmain外,全局变量,register只可用于声明局部变量

int main()

{

    register char var;//可以成为寄存器变量,具体要看是否有寄存器

    print("0x%08X",&var);

    return 0;

}

 

(3)static关键字:指名变量的“静态”属性,将局部变量存储在程序静态区(从栈移到静态区,与全局变量的生命周期相同,但只是工作在局部)

补充:全局变量与静态变量:

#include<stdio.h>

int g_v;//全局变量,(1)程序任意地方均可访问(2)存储在程序的静态区,生命周期为程序运行到结束

static int g_vs;//全局变量,设为静态,只有当前文件中可以访问

 

int main()

{

    int var;//局部变量,auto关键字,在栈上分配空间

    static int svar;//局部变量,从栈移到静态区,生命周期改变

    return 0;

}

 

1)static还具有“作用域限定符”的意义(static修饰的全局变量作用域只是在声明的文件中,修饰的函数只是在声明的文件中)

 

2)实例分析:

#include<stdio.h>

int f1()

{

    int r=0;//rauto的局部变量,在栈上分配空间,调用返回之后,局部变量消失

    r++;

    return r;

}

int f2()

{

    static int r=0;//唯一不同,rstatic的静态局部变量,在静态区分配空间,调用返回之后,局部变量不消失

    r++;

    r++;

    return r;

}

 

int main()

{  

    auto int i=0;//声明iauto,i为栈变量

    static int k=0;//局部变量k的存储区在静态区,作用域在main

    register int j=0;//向编译器申请将j存储在寄存器中

   

    printf("%p,",&i);

    printf("%p,",&k);

    printf("%p,",&j);//error&只能返回内存的地址

   

    for(i=0;i<5;i++)//

    {

       printf("%d,",f1());

    }

    for(i=0;i<5;i++)

    {

       printf("%d,",f2());

    }

    getchar();

 

    return 0;

}

 

分析;(1)I和k相邻定义,但是地址相差远:一个存在栈上,一个存在静态区。若存在同一个位置,则存储在相邻位置 。

(2)输出的11111,12345差异: 第一个r是auto的局部变量,在栈上分配空间,调用返回之后,局部变量消失。第二个r是static的静态局部变量,在静态区分配空间,调用返回之后,局部变量不消失,生命周期是程序的运行周期。

 

(4)extern关键字

1)声明“外部”定义的变量和函数(在文件的其他地方分配空间,定义)

2)用于告诉编译器用c方式编译

extern "c"

{

    int f(int a,int b)

    {

       return a+b;

    }

}

3)编程实验:static和extern使用

#include<stdio.h>

 

extern int g_i;//告诉程序g_i在其他位置

int main()

{

    printf("%d\n",g_i);

    return 0;

}

 

int g_i;//全局变量定义在main后,需要extern提前声明

 

分析:如果全局变量在main后定义,会报错,需要在main前声明为extern

总结:1.auto变量存储在程序的栈,为默认属性

2.static存在程序静态区,作用域限定符,作用域缩小在文件中

3.register存储在寄存器中

4.extern的变量在程序其他位置分配空间,可以指示c++程序中,以c方式编译程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值