黑马程序员——c语言学习—变量作用域
来源:互联网 发布:xp系统修复软件 编辑:程序博客网 时间:2024/05/22 00:51
-----------Java培训、Android培训、IOS培训、.Net培训、期待与您交流!------------
有关变量作用域的总结
1.全局变量
全局变量,也称外部变量,在函数体外定义,不是哪一个函数所特有。全局变量又可以分为外部全局变量和静态全局变量,他们最大的区别在于,使用static存储类别的全局变量只能在被定义的源程序文件中使用,而使用extern存储类别的全局变量不仅可以在被定义的源程序中使用,还可以被其他源文件中的函数引用。如果要在函数中使用全局变量,那么通常需要作全局变量的说明。只有在函数内经过说明的全局变量才能被使用。但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。
定义如下:
#include <stdio.h>int a=0; //全局变量定义并初始化void print(void){printf("global variable a=%d\n", a); //函数体内可以访问}int main(void){print();//执行函数return 0;}需要注意的是,如果在另一个文件内需要访问这个全局变量,或者在这个变量定义之前需要用到他,需要用extern关键词来做声明:
#include <stdio.h> extern int a; // 声明另一个文件中存在的全局变量 void test(){ a = 12; //源文件外访问全局变量}
2、局部变量
局部变量是定义在{}内的普通变量,用auto来修饰(一般可以省略),所以又称为自动变量,局部变量只在{}内定义后有效,{}结束后自动销毁,存储在栈空间(一级缓存)内,他的作用域只限于这个{}内,定义如下:
void test(){ auto int a; // 可以和全局变量重名,在此之后,访问的a都是局部变量 int b; // 省略auto(一般用法) register int c; // 告诉编译器采用寄存器的方式存储变量(速度快,但是会不会做取决于编译器)}
3.静态变量static
关于静态变量,值得注意的一点是,它的生存期是从程序开始运行到程序结束。静态变量不属于动态变量,是静态存储。
静态局部变量的生存期虽然是从程序开始运行到程序运行结束,但是他的作用域并不会因此改变,而且仍然与其作为自动变量的作用域相同。静态全局变量的特点是,它只能在被定义的源程序中使用,即它只能被本源程序文件的函数调用,而不能被其他的源程序文件的函数调用。
下面演示一下静态局部变量的使用
#include <stdio.h>void print(void){static int a=0; //静态局部变量的定义printf("静态局部变量a=%d\n", a++);//调用局部变量}int main(void){print(); //执行打印函数print(); //再次执行打印函数return 0;}
运行结果:
静态局部变量 a=0静态局部变量 a=1分析运行结果可以得知,静态局部变量在初始化以后,再次执行该函数时静态局部变量保存的是上一次运行结果
4.const修饰变量
const修饰词修饰的变量(全局、局部、静态),在其生命周期内无法被修改。可以保护被修饰的内容,防止其被意外修改,增强程序的健壮性,const常量在初始化的时候必须赋值。编译器通常补位普通const常量分配空间,而是将它保存在符号中,这使它成为了一个编译期间的常量,没有存储与读内存的操作,它的效率也是很高。
常用的使用场景如下:
const int a =5; //定义a为不可修改的常量int const a=5; //定义a为不可修改的常量const int *p; //p可变,p指向的对象不可变int const *P; //P可变,p指向的对象不可变int *const p;//p不可变,p指向的对象可变const int * const p;//指针p和p指向的对象都不可变
5.volatile修饰符的作用就是告诉编译器不要对它所修饰的变量进行任何优化,每次取值都要从内存地址中去读取。嵌入式开发中经常跟中断、底层硬件打交道,volatile经常用到。
- 黑马程序员——c语言学习—变量作用域
- 黑马程序员——IOS学习笔记(C语言存储方式和变量作用域)
- 黑马程序员---C语言变量作用域
- 黑马程序员——c语言学习---变量与存储
- 黑马程序员——c语言学习—作用域详解
- 黑马程序员——C语言基础语法(关键字、标识符、注释符、变量、作用域、printf函数、Scanf函数)
- 黑马程序员IOS-C语言-指针、变量作用域
- 黑马程序员-C语言之变量的作用域问题
- 黑马程序员—C语言—局部变量与全局变量
- 黑马程序员——C语言------指针和指针变量
- 黑马程序员——C语言-变量与常量
- 黑马程序员——C语言之全局变量和局部变量以及static和extern修饰符的作用
- 黑马程序员——C语言学习——指针、变量类型
- 黑马程序员之IOS学习总结——01C语言中的常量与变量
- 【黑马程序员】iOS学习之路——C语言之数据类型、常量、变量
- 黑马程序员——Objective-C——点语法、变量的作用域
- 黑马程序员—变量作用域日志总结
- 黑马程序员----C语言变量作用域,存储类型,变量总结,递归思想篇
- .net发送邮件
- Linq中Group和Sum的应用
- 【Cocos2d-x游戏引擎开发笔记(17)】实现运动的尾巴效果
- Altium Designer AD6 AD9 DXP 制作公司LOGO
- TCP三次握手
- 黑马程序员——c语言学习—变量作用域
- 简单返回顶部代码及注释说明
- CoreData的基本使用
- 影响持续集成的几种常见的反模式
- EditText中监听键盘
- URL: 技术图书清单
- 【2015-2】day9 计数一题
- 【Cocos2d-x游戏引擎开发笔记(18)】图形绘制
- #if、#ifdef、#if defined之间的区别