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语言中特殊的指针[使用禁忌] -> 正文阅读

[C++知识库]C语言中特殊的指针[使用禁忌]

1、指针不要赋值为硬编码;

所谓的硬编码就是写死的。

像我们初始化一些设备的参数时,通常会有一些配置文件,然后在设备启动的时候,会加载到固定的内存地址中,然后程序到特定的内存中读取数据并加载。这个时候用硬编码比较合适,但是如果在开发程序的时候,使用硬编码的方式来为指针赋值就会很危险。

例如如下代码:

//1、硬编码
int *p = (int *)0x12345678;
printf("&p=%#x \n",&p);//&p=0xf813faf8
printf("p=%d \n",p);//&p=305419896
printf("*p=%d \n",*p);//error 会有问题

2、空指针NULL的用法;

NULL的源代码:

可以看到是NULL的值是0,这是一个特殊的地址

#ifndef NULL
    #ifdef __cplusplus
        #define NULL 0
    #else
        #define NULL ((void *)0)
    #endif
#endif

在C语言或者C++中,NULL指针也是经常使用的。

例如:

如果我们定义了一个NULL的指针,在赋值初始化的时候,就会报错。

//2、空指针NULL
int *pn = NULL;
printf("%#x \n",&pn);//0xaf7df7c8
*pn = 10;//error 会报错  Process finished with exit code -1073741819 (0xC0000005)
printf("%d \n",pn);

一般先判断一下是否生效,然后再使用

    //2、空指针NULL
    int *pn = NULL;

    printf("%#x \n",&pn);//0xaf7df7c8
    if(pn)
    {
        *pn = 10;//error 会报错  Process finished with exit code -1073741819 (0xC0000005)
        printf("%d \n",pn);
    }

3、注意避免产生野指针;

例如:

例如我们定义了一个全局的指针,想在多个地方使用,那么使用时应该注意,如果在一个函数中使用完毕时,应该赋值为NULL指针,这样的话我们才可以有效的判断,否则无法确定这个指针是否有效,这就是野指针

int *pp1;

void Test()
{
    int a = 100;
    pp1 = &a;
}

改版:

int *pp1;

void Test()
{
    int a = 100;
    pp1 = &a;
		
	//....省略中间过程	

	//结束时 赋值为NULL
	pp1 = NULL;
}

总结

  • 1、指针不要赋值为硬编码;
  • 2、空指针NULL的用法;
  • 3、注意避免产生野指针;
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 10:59:24  更:2021-09-06 11:01:05 
 
开发: 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年11日历 -2024/11/23 19:39:56-

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