#define,const ,static 的使用总结
来源:互联网 发布:dts hd mac 编辑:程序博客网 时间:2024/06/03 12:29
static的使用
1.全局变量(初始化和未初始化),静态变量(全局和局部) 都在静态区存放。
生命周期大于主函数,进程开始时创建,进程结束时回收2.全局变量和静态变量的作用域问题
(1)全局变量的作用于就是全局,跟放置位置无关
(2)静态全局变量static :把修饰的变量的作用与限制在本文件中,
静态局部变量 :只初始化一次,以后直接使用,声明周期贯穿整个进程
(3)static修饰函数(静态函数):限制该函数只能在本文件中使用
const的使用
1.const 只读 限制变量的属性(常变量)
const int *p = &a; //也可以 int const *p=&a*p =30 //出错,因为指针所指向的空间内容不能改
3.const int * const n=&a //此时指针指向和指针指向内容都不能改
4.变量被定义const时,两种方式可以改:
通过指针修改
强制转换变量的类型
const 与 define的 区别(c语言中)
1.编译器处理的方式不同:
define是在预处理阶段展开,const常量是编译运行阶段使用.
2.类型和安全检查不同
define宏没有类型,不做任何类型检查,仅仅是展开替换, const常量有具体的类型,在编译阶段会执行类型检查。
3.存储方式不同
define 宏 仅仅是展开与替换,有多少地方使用,就展开多少次,预处理阶段不会分配内存, const常量定义时候会在内存中分配(可以是 堆,栈)
4. const 可以节省空间,避免不必要的内存分配:
例: #define PI=3.14 //常量宏
const double Pi=3.14; //此时并未将Pi放入ROM中
double a=Pi; //此时为Pi分配内存,以后不分配;
double b=PI; //编译期间进行宏替换,分配内存;
double c=Pi ; //不分配内存
double d=PI; //进行宏替换,再次分配内存
const 定义从汇编的角度来看,只是给出了对应的内存地址,而不是像#define 一样给出的是立即数,所以const常量在程序运行的时候只有一次拷贝,而#define定义的常量在内存中有若干个拷贝。
5.提高了效率:
编译器通常不为普通的const常量分配内存空间,而是将他们保存在符号表中,这使得他成为一个编译期间的常量,也没有了存储与读内存的操作,使得它的效率也很高。
6.应该注意define 替换的时候 产生的一些“边缘效应”:
例:#define N 2+3
float a=N/2; //此时我们的预想值a=2.5, 实际上 a=2+3/2 =3.5
- #define,const ,static 的使用总结
- Define,const,static用法总结
- 面试总结(static、const、define)
- 解析php中static,const与define的使用区别
- 常见的typedef、define、const、static使用辨析
- PHP 的var const static define self $this 使用详解
- iOS开发const,static,extern,#define的使用
- 关键字register static const #define用法总结
- 正确使用#define,const,static,extern
- static,const,inline,define的产生背景
- const, static, define 以及inline的区别
- static、const、extern和define的区别
- 纠结的const(static) 和 define
- static、const、define的一些理解
- static const与#define
- #define inline static const
- static 、const 、 define 、inline
- #define const and static
- java加密与签名
- Socket编程
- 企业管理的笑话,暗藏真理
- STM32_定时器_PWM_笔记
- IDEA Error:java: 未结束的字符串文字
- #define,const ,static 的使用总结
- ch6.正则表达式
- jqwidgets之jqxGrid后台分页排序过滤
- AppCompatActivity的出现
- Java自动内存管理偏爱二
- apache Nifi 概述
- 歪解Runtime
- C++ mutable
- nodejs & npm 在Ubuntu上安装