C语言变量属性:

  • C语言的变量可以有自己的属性
  • 在定义变量的时候加上“属性”关键字
  • “属性”关键字指明变量的特有意义
  • 语法:property type value_name;

  auto关键字:

  • auto即c语言中局部变量的修饰属性
  • auto表明在被修饰的变量存贮于栈上
  • 编译器默认所有的局部变量都是auto类型的

  

  register关键字:

  • register关键字指明将局部变量存贮于寄存器中
  • register只是请求寄存器变量,但是不一定成功
  • register变量必须是CPU寄存器可以接受的值
  • 不能用取地址符号&获取register变量的地址

  static关键字:

  • static关键字指明变量的“静态属性”:static修饰的局部变量存贮在程序静态区
  • static关键字同时具有“作用域限定符”的意义:static修饰的全局变量和函数作用域只是声明的文件中

代码示例1:

 #include <stdio.h>

 int f1()
{
int r = ; r++; return r;
} int f2()
{
static int r = ; r++; return r;
} int main()
{
auto int i = ; // 显示声明 auto 属性,i 为栈变量
static int k = ; // 局部变量 k 的存储区位于静态区,作用域位于 main 中
register int j = ; // 向编译器申请将 j 存储于寄存器中 printf("%p\n", &i);
printf("%p\n", &k);
printf("%p\n", &j); // error for(i=; i<; i++)
{
printf("%d\n", f1());
} for(i=; i<; i++)
{
printf("%d\n", f2());
} return ;
}

其中第33行会出错,因为不能对寄存器变量进行取地址操作;

代码示例2:

 #include<stdio.h>

 register int a=;//error
int main()
{
return ;
}

第3行会出错,因为寄存器的内存非常有限,他不可能让一个全局变量一直占用这个资源。

extern关键字:

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

  • extern变量在文件的其他地方分配空间
  • extern函数在其他的地方定义

extern在C++里面还可以用于告诉编译器使用C方式编译,做一下了解就可以,C++编译器和一些变种C编译器会默认按照“自己”方式编译函数和变量,通过extern关键字可以命令编译器“以标准c方式进行编译”。

 test1.c:

 #include <stdio.h>

 extern int getI();

 int main()
{
printf("%d\n", getI()); return ;
} test2: static int g_i; int getI()
{
return g_i;
}

这里同时编译test1.c和test2.c,在test.c中使用关键字extern,然后具体的定义在test2.c里面定义,因为在test2.c中g_i,使用了static关键字修饰,所以他的作用域只能是本文件,但是在test1.c中可以用extern修饰一个函数,然后在test2.c中定义这个函数用来获得这个g_i的值

小结:

  • auto变量存贮在程序的栈中,默认属性
  • static变量存贮在程序静态区中
  • register变量请求存贮于CPU寄存器中
  • extern变量在文件的其他地方分配空间
  • extern能够指示编译器按照标准C方式编译程序

C语言进阶——变量属性05的更多相关文章

  1. C语言进阶_变量属性

    人们总说时间会改变一些,但实际上这一切还得你自己来. 一.概念详解 变量:计算机语言中储存计算结果,其值可以被修改.通过变量名来访问计算机中一段连续的内存空间. 属性:区别于同类事物的特征. C语言中 ...

  2. 苹果新的编程语言 Swift 语言进阶(八)--属性

    属性是特定类.结构或枚举的相关值,属性根据作用域不同分为实例属性与类型属性,还可以根据是否存储分为存储属性和计算属性. 1.1 实例属性 为一个类.结构或枚举定义的属性默认属于实例属性,即该属性属于为 ...

  3. C语言学习笔记--C语言中变量的属性关键字

    变量属性关键字的使用语法:property type var_name; 1.auto 关键字 auto关键字是C语言中局部变量的默认的关键字,C编译器默认所有的局部变量都是auto的,它表明了被修饰 ...

  4. C语言中变量和函数的作用域和链接属性

    C语言中变量和函数的作用域和链接属性 作用域 代码块作用域: 代码块指的是使用"{}"包围起来的部分. 在代码块中定义的变量,代码块之外是不能访问的. 代码块嵌套之后的变量作用域, ...

  5. 《C语言进阶剖析》课程目录

    <C语言进阶剖析>学习笔记                                                         本文总结自狄泰软件学院唐佐林老师的<C语言 ...

  6. 彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01

    书接上回,我们已经安装好Iris框架,并且构建好了Iris项目,同时配置了fresh自动监控项目的实时编译,万事俱备,只欠东风,彩虹女神蓄势待发.现在我们来看看Iris的基础功能,如何编写项目入口文件 ...

  7. OpenGL ES着色器语言之变量和数据类型(一)(官方文档第四章)和varying,uniform,attribute修饰范围

    OpenGL ES着色器语言之变量和数据类型(一)(官方文档第四章)   所有变量和函数在使用前必须声明.变量和函数名是标识符. 没有默认类型,所有变量和函数声明必须包含一个声明类型以及可选的修饰符. ...

  8. 苹果新的编程语言 Swift 语言进阶(十五)--协议

    协议定义了适合某个特定任务或功能需要的方法.属性和其它需求的一个蓝图.协议本身不提供这些需求的实现,它只是描述了一个任务或功能实现的蓝图. 协议与java 语言中的接口定义类似,都是描述了一个实现可以 ...

  9. Swift5 语言参考(七) 属性

    属性提供有关声明或类型的更多信息.Swift中有两种属性,即适用于声明的属性和适用于类型的属性. 您可以通过编写@符号后跟属性的名称以及属性接受的任何参数来指定属性: @attribute name ...

随机推荐

  1. Linux 学习 二, 安装JDK

    我是利用在window环境下载好JDK,然后传到VMware中linux中 下载JDK http://www.oracle.com/technetwork/java/javase/downloads/ ...

  2. APP常用检测

    检测设备.微信平台和app是否安装 // 检测是否安装了APP var isappinstalled = (function () { ); }()), // 检测ios设备 isIOS = (fun ...

  3. u-boot分析(十一)----MMU简单分析|u-boot分析大结局|学习规划

    u-boot分析(十一) 通过前面十篇博文,我们已经完成了对BL1阶段的分析,通过这些分析相信我们对u-boot已经有了一个比较深入的认识,在BL2阶段大部分是对外设的初始化,并且有的我们已经分析过, ...

  4. u-boot分析(四)---设置异常向量表|设置SVC模式

    u-boot分析(四) 通过前三篇的分析,我们对u-boot已经有了整体的认识和掌握,但是我们仍然对于其部分硬件是如何初始化的不太清楚,所以接下来几篇博文我将会对我们在http://www.cnblo ...

  5. Spring Cloud学习路线

    学习本学习路线学习完,大家将会对微服务.Spring Cloud.Docker.Kubernetes有一个系统.全面的认识.通过学习,将能掌握相关的知识体系,并能够投入到项目实战中去. 本学习路线采用 ...

  6. C语言总结的知识点

    什么是有效数字? ------------------------- 数据类型 运算符: 函数: 程序结构: 存储结构 内存管理 关键字: ------------------------- C语言: ...

  7. mysql索引和正确使用方式

    一.索引类型 B树索引:大部分都是,因此B树的特性限制了索引如何使用:必须看看索引的正确使用限制(含组合索引的限制)http://blog.csdn.net/lovemdx/article/detai ...

  8. Ubuntu 16.04 安装札记

    写在前面的话:第一次写,有点紧张,不知道怎么写,就胡乱写了,主要是写给自己看的,感觉这里大神遍地都是,大牛更是数不胜数,我就一小白,记下来怕以后忘了,言归正传,我初步打算是把这篇博客写成安装指南(捂脸 ...

  9. 使用Excel管理命令输出

    效果图:(饼状图为后添加) 实现代码:

  10. c#按钮如何避免重复点击后报错

    前言:感谢51·halcon的绝地武士大佬啊,虽然你不认识我,但是我从你那学到了很多知识,真的感谢您对知识的无私传播哈哈(两天一个博客有在坚持的,都是草稿,等这个实习阶段过去了再回来整理博客~) bt ...