目录一、C语言中的变量属性二、auto 关键字三、reGISter 关键字四、static 关键字五、extern 关键字六、小结一、C语言中的变量属性 C语言中的变量可以有自己的属
语法:
property type var_name;
示例:
int main()
{
auto char i;
register int j;
static long k;
extern double m;
return 0;
}
示例:
void f()
{
int i; //局部变量默认属性为 auto
auto int j; //显示申明 auto 属性
}
#include<stdio.h>
register int g_v; //eror
int main()
{
register char var;
printf("0x%08X",&var); //error
return 0;
}
static 关键字指明变量的“静态”属性
static关键字同时具有“作用域限定符”的意义
#include<stdio.h>
int g_v; //全局变量,程序的任意地方均能访问
static int g_vs; //静态全局变量,只在当前文件中可访问
int main()
{
int var; //局部变量,在栈上分配空间
static int svar; //静态局域变量,在静态数据区分配空间
return 0;
}
下面看一段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 为栈变量
static int k = 0; // 局部变量 k 的存储区位于静态区,作用域位于 main 中
register int j = 0; // 向编译器申请将 j 存储于寄存器中
printf("%p\n", &i);
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;
}
下面为输出结果:
如果试图获取 register 变量 j 的地址,就会报如下错误:
另外,可以看到 i 和 k 的内存地址相隔很远,这是由于这两个变量一个在栈上,一个在静态区
extern 用于声明“外部”定义的变量和函数
extern 用于“告诉”编译器用C方式编译
c++ 编译器和一些变种C编译器默认会按“自己”的方式编译函数和变量,通过 extern 关键可以命令编译器“以标准C方式进行编译”,如:
下面看一段 static 和 extern 的使用代码:
g.c
static int g_i;
int getI()
{
return g_i;
}
test.c
#include <stdio.h>
extern int getI();
int main()
{
printf("%d\n", getI());
return 0;
}
下面为输出结果:
注意如果想要直接在 test.c 文件里获得 g_i 的值是不行的,因为static 修饰的全局变量作用域只是声明的文件中
到此这篇关于C语言简明讲解变量的属性的文章就介绍到这了,更多相关C语言变量的属性内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: C语言简明讲解变量的属性
本文链接: https://www.lsjlt.com/news/146620.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0