五.变量属性

c 语言中的变量可以有自己的属性

在定义变量的时候可以加上“属性”关键字

“属性”关键字指明变量的特有意义

语法:

 property  type  var_name

示例:

int main()

{

    auto char  i;

   register int j;

   static long k;

  extern double m;

return 0;

}

auto 属性

auto 即c语言中局部变量的默认属性

auto 表明将被修饰的变量存储于栈上

编译器默认所有的局部变量都是auto的

示例:

void f()

{

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

auto int j;// 显示声明 auto 属性

}

register 关键字

register 关键字指明将局部变量存储于寄存器中

register 只是请求寄存器变量,但不一定请求成功

register 变量必须是CPU寄存器可以接受的值

不能用 &运算符获取register变量的地址

全局变量不能声明为寄存器变量 。

#include <stdio.h>

register int g_v; // error

int main()

{

    register char var ;

   printf("0x%08x",&var);// error

return 0;

}

static 关键字

static 关键字指明变量的“静态”属性

static 修饰的局部变量存储在程序静态区

static 关键字同时具有“作用域限定符”的意义

static 修饰的全局变量作用域只是在声明的文件中

static修饰的函数作用域只是在声明的文件中

#include<stdio.h>

int g_v;  //全局变量 程序的任意地方均能访问

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

int main()

{

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

static int svar;// 静态局部变量,在静态数据区分配空间

return 0;

}

extern 关键字

extern 用于声明“外部”定义的变量和函数

extern 变量在文件的其他地方分配空间

extern函数在文件的其它地方定义

extern 用于“告诉”编译器用c方式编译

c++编译器和一些变种c编译器默认会按“自己”的方式编译函数和变量,通过extern 关键可以命名编译器“以标准c方式进行编译”

extern“c”

{

int f(int a, int b)

{

return a+b;

}

}

}

小结:

auto 变量存储在程序的栈上,默认属性

static 变量存储在程序静态区中

register变量请求存储于CPU寄存器中

extern变量在文件的其他地方分配空间

extern能够指示编译器按照标准c方式编译程序

发布了206 篇原创文章 · 获赞 18 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/lvmengzou/article/details/104396958