C++指针探索(一)

C++指针探索(一)

内存
C++内存模型为:代码区、静态区、栈区、堆区、常量区。指针就是内存地址,因此只要在内存中的,指针都可以指向,也就是说指针可以指向代码区、静态区、栈区、堆区、常量区。C++指针可以指向C++中的任何变量。指针即寻址方式为间接寻址,可以有二级指针、三级指针。。。。,级数受内存大小限制。
指针中存放的是内存地址,所以指针本身是没有数据类型的,而C++中可以有整形指针、字符串指针等不同类型的指针。目的在于指定读取存放的内存地址中的数据时内存长度,假设整形(4字节)指针,读取内存数据时,从指向的起始地址开始,读取整形的内存长度为四字节。
C++中指针类型可以强制转换, 指针在C++中占的内存大小是固定的与其类型无关。
空指针
标准并没有对空指针指向内存中的什么地方这一问题作出规定,也就是说用哪个具体地址值表示空指针取决于系统实现。我们常见的空指针一般指向0地址,即空指针的内部用全0来表示(zero null pointer,零空指针);也有一些系统用一些特殊的地址值或者特殊的方式表示空指针(nonzero null pointer,非零空指针),具体参见 C FAQ。注意:不要把空指针的内部实现表示等同于整数0的对象表示——如上所述,有时它们是不同的。
实际上空指针的0地址并不是物理内存的开端的0地址,这与操作系统的内存机制有关,windows系统会给程序分配一段专属的内存区域,该程序的相关资源均运行在该内存区,所以程序空指针指向的实际上是该段内存的起始地址,也就是说不同进程的空指针指向的物理内存地址其实是不同的,虽然他们逻辑上都指向0地址。
空指针赋值分区是进程的地址空间中从0x00000000 到 0x0000FFFF 的闭区间(64K 的内存大小),这 64K 的内存是一块保留内存,不能被程序动态内存分配器分配,不能访问,也不能使用,保留该分区的目的是为了帮助程序员捕获对空指针的赋值。如果进程中的线程试图读取或者写入位于这一分区内的内存地址,就会引发访问违规。
归根结底,程序中所使用的数据都需要从物理设备上获取,即程序中的数据需要从一个真实的物理地址中读取或者写入。所以当一个指针的逻辑地址可以通过计算能够准确无误的映射到一个正确的物理地址上时,这时候数据的访问就是正确的,程序的执行也没有任何问题。如果一个指针为空指针,那么该指针所指向的逻辑地址空间位于空指针赋值分区的区间上。空指针赋值分区上的逻辑地址没有物理存储器与之对应,因而访问时就会产生违规访问的异常。
野指针
野指针是指向不合法内存的指针。
野指针的出现有三种情况:初始化时未赋初值、指针被free或delete后没有及时指针本身、指针指向临时变量,访问越界。初始化时指针的缺省值是随机的,所以未赋初值会导致指针指向不可预测的内存,导致程序产生意想不到的错误;指针所指向的内存地址数据被释放掉后,指针依然指向该内存;指向临时变量的问题原理上同上;指针操作数组时由于C++的数组没有越界检查,因此很容易访问越界访问到了不该访问的内存区域

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值