从符号表来理解指针和引用
2015-06-01 18:05
232 查看
一.符号表:
简单说来符号表是用来储存源代码中出现的有关名字的信息,对应到本文中就是保存了变量的名称和变量在内存中分配的首地址。1.普通类型:
如下代码:int main(int argc, char* argv[]){ int a = 5; char b = 'c'; return 0; }
对应的符号表如下图所示:
2.指针类型:
32位的系统会为指针类型的变量分配一个4字节的内存用来存储指向数据的地址。如下代码:int main(int argc, char* argv[]){ int a = 5; char b = 'c'; int* pa = &a; return 0; }
对应的符号表如下图所示:
由上图可以看出系统为int*(指针)类型分配了的内存地址为1005,符号表中pa对应的地址值也是1005。
赋值语句 int* pa = &a; 将1005对应内存块的值设置为a的地址1000,结果就是*pa的值等于内存块1000中的值即5。
3.指针的指针
指针的指针从根本上来说还是指针,如下代码所示:int main(int argc, char* argv[]){ int a[3] = { 1, 2, 3 }; int *pa = a; int **point = &pa; }对应的符号表如下:
在C++中数组变量对应的也是指针类型,指向的是数组的首地址,所有在字符表中a存储的地址值为1000;然后
int *pa = a;该赋值语句执行后,系统为pa分配了内存用来存储int*,该地址是1012号,指向1000号内存块;
int **point = &pa;指针的指针在本质上也是指针,所以系统同样为point分配了1016号内存块用来存储int**指针类型,该内存块中存储的值为pa的地址即1012。
最终**point的值就等于*point(point中存储的地址值即1012号内存块)指向的内存地址(1000)中的值即1。
4.引用类型
引用类型在系统中不会像指针类型一样分配新的内存空间,在符号表上引用类型仅仅是引用对象的一个别名;可以将他们理解成一个不可分割的整体。所有对引用的操作都会反映到引用对象上。所以引用在定义时就要被初始化,并且从一而终不可变,并且不可以为空。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++中拷贝构造函数的应用详解
- C++中引用(&)的用法与应用实例分析
- C++使用CriticalSection实现线程同步实例
- C++智能指针实例详解
- 解析C++ 浮点数的格式化输出