c语言学习之基础知识点介绍(十八):几个修饰关键字和内存分区
一、几个修饰关键字
全局变量:
全局变量跟函数一样也分为声明和实现。如果是全局变量,实现在它调用之后,那么需要在调用之前进行声明。
注意:全局变量的声明只能写在函数外,写在函数就不是全局变量了而是局部变量。
static:
修饰局部变量:
可以把局部变量变为静态变量。意思就是:程序一启动就加载,程序退出才会回收空间(跟全局变量很像) 。
静态变量:用static修饰的局部变量就叫静态变量。
修饰全局变量:
让全局变量只能在本模块中访问。
修饰函数:
修饰函数的话,只能在本模块中访问。
extern:
不能修饰局部变量。
修饰全局变量:
让全局变量在所有模块中都能访问。
修饰函数:
extern修饰函数,代表所有模块都能访问。它是默认的(不写就是extern)
以下两个都只能修饰局部变量。
auto(了解):默认的,交给系统自动管理内存(放在栈区),就是什么时候开辟,什么时候回收,系统管理。
register(了解):把变量加到寄存器。寄存器就是CPU临时保存数据的地方,特点是:非常快,但是容量小,造价金贵,所以只能保存极少的数据。
后编译时代,意思就是编译器在编译的时候会自动根据你代码进行优化,编译器帮你判断什么时候用auto,什么时候用register
二、内存分区
栈区: 所有局部的变量,由系统自动管理,出了作用域就回收
堆区: 程序员自己申请开辟的空间,都是在堆区,程序员自己维护回收
全局区: 所有的全局变量和静态变量,程序一启动就开辟,程序退出才回收
bss段和data段
bss段保存的是所有未初始化的全局变量和静态变量(只是记录一下,记录有多大)
data段保存的是所有已初始化的全局变量和静态变量
常量区:rodata段。就是所有的常量。文本常量(字符串),程序一启动就开辟,程序退出才回收
代码区:就是编译后的二进制代码。程序一启动就开辟,程序退出才回收
text段
从上往下,地址是从高到低
只需要记住:每个区分别放的是什么东西就行了。
c语言学习之基础知识点介绍(十八):几个修饰关键字和内存分区的更多相关文章
- c语言学习之基础知识点介绍(八):函数的基本用法
本节开始说函数. 一.函数的基本用法 /* 作用:可以实现代码的复用,在一定程度上解决代码冗余的问题:方便后期维护. 语法: void 函数名(){ 函数体; } 函数命名要有意义,遵守驼峰命名法. ...
- c语言学习之基础知识点介绍(三):scanf函数
本节继续介绍c语言的基础知识点. scanf函数:用来接收用户输入的数据. 语法:scanf("格式化控制符",地址列表); 取地址要用到取地址符:&(shift+7) 例 ...
- c语言学习之基础知识点介绍(二):格式化控制符和变量的补充
上节简单介绍了c语言中的一些基础知识点,本节将对之前介绍的不够详细的知识点进行补充. 格式化控制符的消息介绍: %d的其他控制符: 1.%md:m代表这个整数位占用多少位,m是一个整数.实际数字不足的 ...
- oc语言学习之基础知识点介绍(二):类和对象的进一步介绍
一.类.对象在内存中的存储 /* 内存分区: 栈:局部变量 堆:程序员自己写代码申请开辟的 程序员自己维护,编译器现在帮我们自动优化了,它在合适的给我们加上了释放空间的语句,所以我们现在写的对象不会造 ...
- c语言学习之基础知识点介绍(十四):指针的进阶
一.指针的加.减法运算 /* 1.加法运算 1).可以跟整数进行加法运算,得到的还是一个地址 公式: 地址 + 1 = 地址 + 1 * 类型所占的字节数 地址 + n = 地址 + n * 类型所占 ...
- c语言学习之基础知识点介绍(十):数组
本节主要介绍数组. 一.数组 /* 数组:一个变量可以存n个变量. 语法:类型 数组名[长度(正整数)]; 例如:int score[5];//定义了一个int类型的数组,长度为5,可以保存5个数据. ...
- c语言学习之基础知识点介绍(二十):预处理指令
一.预处理指令的介绍 预处理命令:在编译之前触发的一系列操作(命令)就叫预处理命令. 特点:以#开头,不要加分号. #include: 文件包含指令 把指定文件的内容复制到相应的位置 #define: ...
- c语言学习之基础知识点介绍(十五):函数的指针
一.函数的指针的介绍 /* 函数指针: 函数的指针,本质上一个指针 指向函数的指针,就是一个函数指针. 回忆:我们写的源代码编译成二进制的指令集,一串交给CPU执行的指令 先存在内存里面,然后CPU读 ...
- c语言学习之基础知识点介绍(十二):结构体的介绍
一.结构体的介绍 /* 语法: struct 结构体名{ 成员列表; }; 切记切记有分号! 说明:成员列表就是指你要保存哪些类型的数据. 注意:上面的语法只是定义一个新的类型,而这个类型叫做结构体类 ...
- c语言学习之基础知识点介绍(十):内存空间模型、地址解释及指针变量
一.内存 /* 内存: 存在内存里的. 内存分了N多个小空间,每个小空间1个字节 每个小空间有它自己的地址.每个地址之间差1 int类型占用4个字节,等于占了4个空间(有4个地址),不需要记住4个地址 ...
随机推荐
- Problems encountered while deleting resources.
Error The project was not built due to “Problems encountered while deleting resources.”. Fix the pro ...
- Android图片上传,可以选择多张图片,缩放预览,拍照上传等
仿照微信,朋友圈分享图片功能 .可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 .很不错的源码,大家有需要可以下载看看 . 微信 微信 微信 ...
- HDU 1881
思路:一开始以为rating相同的点就直接比较rp然后建图,后来想想不对,因为这样发现不了冲突.后来一想对于rating相同的点可以不用排序,因为对于这些点,他们的rp必然不相同,也就是说在这些点的内 ...
- CentOS6.x安装配置nginx [转]
博文来源:http://leyewen.blog.163.com/ nginx安装 nginx的官网:http://nginx.org/ 相应下载页面:http://nginx.org/en/ ...
- 动态链接库(DLL)的使用
2013-07-04 http://blog.csdn.net/blpluto/article/details/5715182 感觉挺好,推荐去看看.
- PHP使用SwiftMailer发送邮件
用到了swiftmailer 的lib库 官方网址:http://swiftmailer.org/ require_once 'lib/swift_required.php';//给我发送邮件func ...
- CentOS 6.4 安装 Transmission 2.76
1.安装Transmission 首先打开Transmission下载页:http://www.transmissionbt.com/download/ ,点击CentOS下载项,会跳转到一个叫&qu ...
- poj 2942--Knights of the Round Table (点的双连通分量)
做这题简直是一种折磨... 有n个骑士,骑士之间相互憎恨.给出骑士的相互憎恨的关系. 骑士要去开会,围成一圈坐,相互憎恨的骑士不能相邻.开会骑士的个数不能小于三个人.求有多少个骑士不能开会. 注意:会 ...
- Markdown中实现缩进的方法
markdown中实现缩进的方法 在每一行开头的时候,先输入下面的代码,然后紧跟着输入文本即可.注意有分号. 半角空格: 或 全角空格: 或 不换行空格: 或
- Objective-C-使用NSMutableURLRequest发送POST请求,使用NSJSONSerialization解析JSON字符串
NSString *reqData = @"Data="; NSData *postDatas = nil; NSString *urlPath = @"url" ...