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、注意避免产生野指针;
目录
相关文章
|
15天前
|
安全 C语言
【C语言】如何规避野指针
【C语言】如何规避野指针
20 0
|
16天前
|
C语言
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
|
1月前
|
存储 程序员 编译器
爱上C语言:指针很难?来来来,看看这篇(基础篇)
爱上C语言:指针很难?来来来,看看这篇(基础篇)
|
5天前
|
C语言
c语言指针总结
c语言指针总结
12 1
|
11天前
|
存储 程序员 C语言
【C 言专栏】C 语言指针的深度解析
【4月更文挑战第30天】C 语言中的指针是程序设计的关键,它如同一把钥匙,提供直接内存操作的途径。指针是存储其他变量地址的变量,通过声明如`int *ptr`来使用。它们在动态内存分配、函数参数传递及数组操作中发挥重要作用。然而,误用指针可能导致错误,如空指针引用和内存泄漏。理解指针的运算、与数组和函数的关系,以及在结构体中的应用,是成为熟练 C 语言程序员的必经之路。虽然挑战重重,但掌握指针将增强编程效率和灵活性。不断实践和学习,我们将驾驭指针,探索更广阔的编程世界。
|
12天前
|
算法 搜索推荐 程序员
C语言中的函数指针和回调函数
C语言中的函数指针和回调函数
9 2
|
15天前
|
存储 编译器 C语言
【C语言】初步解决指针疑惑
【C语言】初步解决指针疑惑
7 0
|
16天前
|
存储 C语言
指针深入解析(C语言基础)带你走进指针,了解指针
指针深入解析(C语言基础)带你走进指针,了解指针
|
16天前
|
C语言 C++
C语言:指针运算笔试题解析(包括令人费解的指针题目)
C语言:指针运算笔试题解析(包括令人费解的指针题目)
|
18天前
|
存储 安全 编译器
C语言怎样定义指针变量
C语言怎样定义指针变量
7 0