此网站为连连棋牌演示网站
当前位置:首页 > C++ > 正文

关于C++中的指针

12-31 C++

  最近因为项目原因,在学C++相关的内容。由于有C#的基础,学起来还是比较快一些的。毕竟基础语法相同的地方还是挺多的。

  但是C#和C++比较不同的一个概念就是指针。C#中弱化了指针的概念,而指针在C/C++中却是非常重要的概念。

  指针,就是一个存储计算机内存地址的一个变量,通过这个变量,可以很方便的操作内存中的值。

  计算机内存条的物理内存被虚拟化成虚拟内存,虚拟内存可以简单理解为一个个有序的小方格。每个小方格的大小就是一个存储单元(1byte,也就是8bit,可以存放8位二进制数)。

  而每个小方格都有一个编号,这个编号就是内存地址。拿32位计算机来举例,它的内存地址是32bit,也就是4字节,可以用8位16禁止的数据表示,如0x00010001就表示一个内存地址。32位计算机的内存地址范围(也叫寻址范围)是从0x00000000~0xFFFFFFFF,这也就解释了为什么32位计算机最大内存是4G。需要说明的是0~255号内存地址是操作系统保留内存地址,无法对其进行操作。

  例如我们定义了一个变量int a = 10;那么这个计算机中就会开辟一个内存空间,int类型一般是占四个字节内存空间,如下图,计算机在1221~1224地址上开辟了空间存储变量a,第一个存储空间的地址就代表a的地址,这个a就代表里面存储的数据10。至于为什么是开辟了四个内存空间,因为int类型的范围在0~2^32-1,需要8位2进制数据保存内容。

  我们定义一个指针,并让他指向a,int* p = &a;(&表示取a的地址。)那么p里存储的值就是变量a的地址1221,也就表示p指向a,如何通过指针获取a的值?那就是通过解引用*p。

  可以看到P也有自己的内存空间,因为指针只需要存内存地址,而内存地址都是4字节(32位系统),因此指针所占用的内存空间都是4字节。

  指针类型,指的是指针所指向的数据类型。指针是可以进行加减操作的,就是依靠指针类型。如int* p1; p1++; 就表示指向int类型的指针p1,p1原来指向的地址是1220,那么p1++之后指向的地址就是1224(int类型占四个字节);double* p2,p2++,p2原来指向1220,p2++之后就指向1228(double类型占8个字节)。

  指针变量是一个特殊的变量,直接打印它的值,能得到一个内存地址。通过*p的方式进行解引用就能得到p指向的内存地址中的值。

  指针指向的地址,代表给指针赋值,也是让指针和普通变量关联起来。不能直接给指针赋一个具体的值,那样做的话会得到一个野指针。如int* p = 0x00008923;这样就是一个野指针,是不安全的,也是程序不允许的,因为可能会导致程序活系统崩溃。

版权保护: 本文由 首页 原创,转载请保留链接: http://www.wsxzr.com/News/334.html

博客主人bfyysw
男,文化程度不高性格有点犯二,已经20来岁至今未婚,闲着没事喜欢研究各种代码,资深技术宅。
  • 文章总数
  • 43823访问次数
  • 建站天数
  • 标签