IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ 指针笔记(基本定义、注意事项、空指针、野指针、const修饰指针) -> 正文阅读

[C++知识库]C++ 指针笔记(基本定义、注意事项、空指针、野指针、const修饰指针)

指针

指针在程序中起到传递变量地址、优化内存调用的作用,为变量/对象声明指针后,指针承载了变量/对象的内存地址。这样一来,当我们需要访问该变量/对象的内存时,可以简单地对指针解引用,避免了内存重复调用,节省空间。

定义指针时,语法规则为:数据类型 * 指针变量名

使用指针时,可以解引用:在指针前加 * 表示解引用

在32位操作系统下,指针占用4个字节的内存空间;而64位操作系统下,占用8个字节空间。(无关数据类型)

指针的注意事项

a. 指针指向常量存储区对象

指针指向常量储存区的对象时,由于为常量(常量一经声明无法更改值),故无法对该对象进行写操作。

b. 资源泄露

#include<iostream>
using namespace std;
void main()
{
    char *p=new char[3];  //分配三个字符空间,p指向该内存空间
    p="ab";             //此时p指向常量“ab”,而不再是new char分配的内存空间了,从而造成了资源泄漏
    delete []p;         //释放时报错
}

如上执行时,由于资源泄露会报错或卡住。改进如下:

#include<iostream>
using namespace std;
void main()
{
    char *p=new char[3];  //分配三个字符空间,p指向该内存空间
    strcpy(p,"ab");      //将"ab"存储到p指向的内存空间
    delete []p;         //ok
}

*strcpy()函数用于字符串复制,用法是传入2个字符数组指针来执行,如strcpy(a,b)是将b指向的字符串复制到a指向的空间中。

有关于strcpy()及其安全版本strcpy_s()函数使用的注意事项,请点此处跳转

空指针

空指针在指针变量初始化时可作“临时占位符”,即当不指定指针所指向的内存地址时,空指针指向编号为0的内存。空指针也叫“NULL”。

注意:不可访问空指针所指定的内存(若访问,会报错。)

注意:编号0-255为系统预留内存。

野指针

野指针指的是由于强行数据转换等原因直接指向某一个未获得访问权限的内存空间的指针。在编写程序时应尽量避免生成野指针。

野指针的成因如下:

1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。

char *p; //此时p为野指针

2)指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。

char *p=new char[10];  //指向堆中分配的内存首地址,p存储在栈区
cin>> p;
delete []p; //p重新变为野指针

3)指针操作超越了变量的作用范围。? ?

char *p=new char[10]; //指向堆中分配的内存首地址
cin>> p;
cout<<*(p+10); //可能输出未知数据

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-29 10:03:43  更:2021-09-29 10:05:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 4:39:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计