2023拉

C语言中指针与地址的关系讲解

上一篇 / 下一篇  2012-03-07 13:20:53 / 个人分类:软件开发相关

指针的本质是引用(不是C++中的引用类型),是C/C++各种实体抽象的引用。

C/C++的指针与内存地址是不同层次的两种东西。两者 第一个主要的比较明显的区别,就像上面有些朋友已经提到的,是指针的类型。C/C++的指针是带有类型抽象的,而内存地址是没有类型的,仅仅是内存单元的 有序编号,汇编语言使用的地址比内存地址带有更多的信息,但仍属于低层抽象,它仅指出指向的内存区域的大小,但不指出指向的是什么东西,因为汇编语言并非 高级语言,抽象的层次是很低的,实体类型并不是它需要的。

第二个区别,C/C++指针与内存地址之间的联系是抽象与实现的关系。指针是高 层抽象,内存地址仅是高层抽象的实现方法之一,“指针就是地址”这句话实质是将表现形式理解成了本质。引用才是指针的本质,引用这个抽象如何实现?可以有 很多种方法,内存地址(不管是物理地址还是段页式内存管理使用的相对地址)不过是实现方法之一。

在C中,由于所有指针类型都是标量,与内 存地址同是数值,两者的区别比较容易模糊;而C++中的区别就明显得多,因为C++存在不是标量的指针----成员函数指针,一般而言,成员函数指针的实 现是一个结构体,并非数值,与内存地址是完全不一样的,是指针引用本质的不同体现。

  地址空间分两种:虚拟地址和物理地址。操作系统会负责虚拟地址和实际物理地址的映射。
一般一个进程(程序)的地址空间为4G(32位机),
那么指针其实可以指向其中任何的地址

TAG:

 

评分:0

我来说两句

Open Toolbar