C语言存储模型
2016-07-24 11:19
260 查看
auto:默认,自动分配空间,自动回收空间
register:
1. register变量必须是能被CPU寄存器所接受的类型,这通常意味着register变量必须是一个单个 的值,并且其长度应小于或等于整型的长度。这与处理器的类型有关。
2. 声明为register仅仅是一个请求,而非命令,因此变量仍然可能是普通的自动变量,没有放在 寄存器中。
3. 由于变量有可能存储在寄存器中,因此不能用取地址运算符“&”获取register变量的地址。 如果有这样的写法,编译器会报错。
4. 只有局部变量和形参可以作为register变量,全局变量不行。
5. 实际上有些系统并不把register变量存放在寄存器中,而优化的编译系统则可以自动识别使用 频繁的变量而把他们放在寄存器中。
static:静态型
1.自动初始化为0值或空值,并值其变量的值有继承性
void func(void)
{
static int x = 0;
x = x + 1;
printf("%p->%d\n",&x,x);
}
int main()
{
func();
func();
func();
}
Result:
1
2
3
备注:这里的static就具有继承性,意思第一次定int x,下次再调用的时候就不再调用
2.限制作用域范围
main.c
#include <stdio.h>
#include <stdlib.h>
#include "proj.h"
static int i = 10;
int main()
{
printf("[%s]:i = %d\n",__FUNCTION__,i);
//__FUNCTION__表示是哪个函数
func();
exit(0);
}
proj.h
#ifndef PROJ_H__
#define PROJ_H__
void func(void);
#endif
proj.c
#include <stdio.h>
#include <stdlib.h>
#include "proj.h"
static int i = 100;
void func(void)
{
printf("[%s]:i= %d\n",__FUNCTION__,i);
exit(0);
}
Result:
[main]:i = 10
[func]:i = 100
注意static
1.以上如果变量i不加static会在编译的时候会出现变量冲突,
加了static表示只能在当前文件中使用
2.如果在void func(void)加一个static 表示只能在当前文件中调用,
在其他文件中不能调用,如上面main.c
extern:说明型
不能改变被是一个说明的变量的值或类型
本文出自 “把学习记录下来” 博客,请务必保留此出处http://sjgwyy.blog.51cto.com/3830494/1829294
register:
1. register变量必须是能被CPU寄存器所接受的类型,这通常意味着register变量必须是一个单个 的值,并且其长度应小于或等于整型的长度。这与处理器的类型有关。
2. 声明为register仅仅是一个请求,而非命令,因此变量仍然可能是普通的自动变量,没有放在 寄存器中。
3. 由于变量有可能存储在寄存器中,因此不能用取地址运算符“&”获取register变量的地址。 如果有这样的写法,编译器会报错。
4. 只有局部变量和形参可以作为register变量,全局变量不行。
5. 实际上有些系统并不把register变量存放在寄存器中,而优化的编译系统则可以自动识别使用 频繁的变量而把他们放在寄存器中。
static:静态型
1.自动初始化为0值或空值,并值其变量的值有继承性
void func(void)
{
static int x = 0;
x = x + 1;
printf("%p->%d\n",&x,x);
}
int main()
{
func();
func();
func();
}
Result:
1
2
3
备注:这里的static就具有继承性,意思第一次定int x,下次再调用的时候就不再调用
2.限制作用域范围
main.c
#include <stdio.h>
#include <stdlib.h>
#include "proj.h"
static int i = 10;
int main()
{
printf("[%s]:i = %d\n",__FUNCTION__,i);
//__FUNCTION__表示是哪个函数
func();
exit(0);
}
proj.h
#ifndef PROJ_H__
#define PROJ_H__
void func(void);
#endif
proj.c
#include <stdio.h>
#include <stdlib.h>
#include "proj.h"
static int i = 100;
void func(void)
{
printf("[%s]:i= %d\n",__FUNCTION__,i);
exit(0);
}
Result:
[main]:i = 10
[func]:i = 100
注意static
1.以上如果变量i不加static会在编译的时候会出现变量冲突,
加了static表示只能在当前文件中使用
2.如果在void func(void)加一个static 表示只能在当前文件中调用,
在其他文件中不能调用,如上面main.c
extern:说明型
不能改变被是一个说明的变量的值或类型
本文出自 “把学习记录下来” 博客,请务必保留此出处http://sjgwyy.blog.51cto.com/3830494/1829294
相关文章推荐
- 高级c++头文件bits/stdc++.h
- 人脸识别CSV文件(c++实现)
- C++指向常量的指针和常指针
- 深入理解C语言的函数调用过程
- 1096. Consecutive Factors (20)
- C++中map容器的说明和使用技巧
- C++多态性机制初探
- C语言测试题的讲解分析
- C++中数字与字符串的相互转换
- LeetCode-难题集之Merge Two Sorted Lists
- C语言中 fp = fopen(filename, “rb”); 那个rb是什么意思啊
- 李洪强漫谈iOS开发[C语言-020]-scanf的本质
- Partition List
- c++中vector的用法详解
- C++ vector 用法(#include <vector>)
- 嵌入式学习--step3 程序下载与调试/嵌入式C语言应用
- C语言培训_011
- 李洪强漫谈iOS开发[C语言-019]-断点调试
- VS2013(Ctrl+F5)运行程序后闪退问题
- c++设计模式之适配器模式