人们总说时间会改变一些,但实际上这一切还得你自己来。

一.概念详解

  变量:计算机语言中储存计算结果,其值可以被修改。通过变量名来访问计算机中一段连续的内存空间。

  属性:区别于同类事物的特征。

  C语言中变量的属性关键字有:auto register static extern

二.属性关键字详解

  ①auto

    用于修饰局部变量的默认属性修饰关键字,表明将自动变量表明存储在栈中。

     @note:auto只能修饰局部变量,修饰全局变量会报错。

 #include <stdio.h>
auto int var=;  //err: auto不能修饰全局变量。
int main(){
printf("%d\n",var);
return ;
}

  ②register

    用于向编译器申请将局部变量放入寄存器区域,不一定请求成功。

 #include <stdio.h>
register int var=; //err:  register name not specified for 'var'
int main(){
register int i=;
printf("%d\n",&i); //err:address of register variable 'i' requested
printf("%d\n",var);
return ;
}

    @note:不能利用取地址运算符&,来获得寄存器变量的地址。

  ③static

    将变量存储到静态区域。

    修饰全局变量:将静态全局变量的作用域缩小到定义文件。

    修饰局部变量:将静态局部变量存储到静态区域,延长局部变量的生命周期。

    修饰函数:静态函数作用域只是声明的文件中。

 #include <stdio.h>
int f1(){
int i=;
i++;
return i;
}
int f2(){
static int i=;
i++;
//k++;      //err:'k' undeclared (first use in this function)
return i;
}
int main(){
int j=;
static int k;
for(j=;j<;j++)
printf("%d\n",f1());
for(j=;j<;j++)
printf("%d\n",f2());
return ;
}

    

  ④extern

   用于声明外部的变量或函数,告知编译器在其他文件中寻找该变量或函数定义。

     扩展:C与C++语言之间的桥梁,告知C/C++编译器以C语言编译方式编译。

  

 #include <stdio.h>
extern int i;  //
int main(){
printf("%d\n",i); //告诉编译器i在其他地方可以找到。
return ;
}
int i=;

三、extern和static的互斥关系

extern用于引用外部的,也即其他文件中的全局变量或函数。而static修饰的全局变量作用域被限定在本文件内,故而使用extern关键字引用其他文件的静态全局变量是不行的。

test1.c

 #include <stdio.h>
extern int i;
int main(void){
printf("%d\n",i);
return ;
}

test2.c

#include <stdio.h> static int i=;

报错err:undefined reference to `i'

extern可与static结合使用,屏蔽test2代码中的实现细节,只提供一个函数接口给其他人使用,可有效防止泄密。

使用示例:

 #include <stdio.h>
extern int getI();
extern int putI(int j);
int main(void){
int i;
i=getI();
printf("%d\n",i);
scanf("%d",&i);
putI(i);
i=getI();
printf("%d\n",i);
return ;
}
 #include <stdio.h>
static int i=;
int getI(){ return i;
}
int putI(int j){
i=j;
return ;
}

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

  1. C语言进阶_分支语句

    勇气是在压力之下展现出的优雅. 一.简介 C语言提供了两种分支语句可供选用,一是if.......else....类型,一种是Switch语句.两种语句都能根据条件判断结果执行不同的指令,且能进行替换 ...

  2. C语言进阶——变量属性05

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

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

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

  4. JS_object添加变量属性_动态属性

    总结,给对象动态添加变量属性的方法如下: obj[变量]=变量值; 备注: obj.属性=属性值 ; obj={属性:属性值}; 这两种方式添加的属性都不能使用变量作为属性. 犯过的错误: var t ...

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

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

  6. iOS中的成员变量,实例变量,属性变量

    在ios第一版中: 我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如: 注意:(这个是以前的用法) @interface MyV ...

  7. Python 进阶_生成器 & 生成器表达式

    目录 目录 相关知识点 生成器 生成器 fab 的执行过程 生成器和迭代器的区别 生成器的优势 加强的生成器特性 生成器表达式 生成器表达式样例 小结 相关知识点 Python 进阶_迭代器 & ...

  8. python进阶_浅谈面向对象进阶

    python进阶_浅谈面向对象进阶 学了面向对象三大特性继承,多态,封装.今天我们看看面向对象的一些进阶内容,反射和一些类的内置函数. 一.isinstance和issubclass  class F ...

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

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

随机推荐

  1. Reward 杭电 2647

    Problem Description Dandelion's uncle is a boss of a factory. As the spring festival is coming , he ...

  2. 原创Pig0.16.0安装搭建

    tar -zxvf pig-0.16.0.tar.gz -C ~   vi ~/.bash_profile export PIG_HOME=/home/hadoop/pig-0.16.0 export ...

  3. Redisson 实现分布式锁的原理分析

    写在前面 在了解分布式锁具体实现方案之前,我们应该先思考一下使用分布式锁必须要考虑的一些问题.​ 互斥性:在任意时刻,只能有一个进程持有锁. 防死锁:即使有一个进程在持有锁的期间崩溃而未能主动释放锁, ...

  4. EOS基础全家桶(八)jungle测试网的使用

    简介 前面我们已经学习了一些EOS的基础知识了,但是在EOS主网上的很多操作(比如:抵押.赎回.买卖内存)都是需要EOS链被正式激活后才可使用,而激活EOS链还需要很多的准备操作,我打算在单独的一篇文 ...

  5. Linux学习笔记(五)搜索命令

    搜索命令 whereis which locate find whereis 英文原意:locate the binary,source,and manual page files for a com ...

  6. #4018. 统计n! 尾部零

    题目出处: http://www.51cpc.com/problem/4018 题目描述 试统计正整数n的阶乘n!=1×2×3×…×n尾部连续零的个数. 输入格式 输入正整数n 输出格式 输出个数 样 ...

  7. windows下部署.netcore+docker系列三 (unbuntu 18.4 下安装ftp)

    // 先更新下系统sudo apt-get update//安装ftpsudo apt-get install vsftpd// 启动 服务sudo service vsftpd start//ftp ...

  8. ISO及安全业务,机制

    ISO 应用层 为应用软件提供接口,使应用程序能够使用网络服务. 各种应用程序协议如HTTP(Web),Telnet(远程控制),FTP(文本传输) 表示层 数据的交换格式.数据加密解密.数据的压缩解 ...

  9. hdu_1050 Moving Tables 贪心

    Moving Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  10. linux 之学习路线

    原文地址:https://www.oschina.net/question/587367_156024 推荐的发行版如下: UBUNTU 适合纯菜鸟,追求稳定的官方支持,对系统稳定性要求较弱,喜欢最新 ...