05_变量属性
Posted chen-ace
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了05_变量属性相关的知识,希望对你有一定的参考价值。
变量属性
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
", &i);
printf("%p
", &l);
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());
}
return 0;
}
输出结果为:
(2)static和extern的使用
#include <stdio.h>
extern int g_i;
int main(void)
{
printf("%d
",g_i);
return 0;
}
int g_i;
输出结果为:0
若把int g_i屏蔽,则
#include <stdio.h>
extern int g_i;
int main(void)
{
printf("%d
",g_i);
return 0;
}
//int g_i;
输出结果为:
同样的道理,当其他文件里的变量被static修饰了,extern关键字失去作用;
1.c
#include <stdio.h>
extern int g_i;
int main(void)
{
printf("%d
",g_i);
return 0;
}
2.c
static int g_i;
输出结果同样会报错
若代码改为一下情况,则不会报错;
1.c
#include <stdio.h>
extern int getI();
int main()
{
printf("%d
", 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_变量属性的主要内容,如果未能解决你的问题,请参考以下文章