指针分类

本文介绍了C语言中指针的四种分类:野指针、半指针(const修饰的数据对象)、只读指针(const修饰的指针本身)和死指针。详细阐述了各类指针的特点和使用注意事项,特别强调了野指针应初始化为NULL以避免风险。
摘要由CSDN通过智能技术生成

指针分类

指针就是地址,指针变量是保存地址的变量;
指针功能有两个,通过地址访问数据对象,和通过地址修改数据对象。 我将指针分为以下几类:

1. 野指针

是指未初始化的指针,非常危险,所建议初始化为Null;

2. 半指针

const int * p1 无法通过指针修改数据对象
是这样理解的:
* 指针指向int 类型
* int 类型被声明为const

const 关键字
将变量变为只读模式,无法被修改。可以理解为:锁定写的权限。例如:

const int a = 1;  
a++;  //报错,无法自增  

3. 半指针

int const *p2 无法修改地址,指针只能指向一个对象
是这样理解的:
* 指针指向const类型
* const被声明为int

4. 死指针

const int const *p3既无法修改地址,也无法通过指针修改对象的值

代码清单如下

#include <stdio.h>

const int data1[2] = { 100, 200 };   //数组元素被锁定,无法被修改
int data2[2] = { 300, 400 };
int data3 = 500;

int main(void)
{
    int * p1;   //普通指针
    const int * p2; //半指针1,能修改地址,无法通过指针修改对象值
    int * const p3 = data2; //半指针2,无法修改地址,能修改对象值


    //1、普通指针和const数组
    p1 = data1;
    printf("p1 = %p\n", p1);
    printf(" *p1 = %d\n", *p1);
    //警告:assignment discards 'const' qualifier from pointer target type
    //意思为:指针丢掉“const”限定符
    /*  *p1 = 500;  //错误
    printf(" *p1 = %d\n", *p1);
    */
    //2、半指针1和普通数组
    p2 = data2;
    //   *p2 = 500;   //错误
    //   printf(" *p2 = %d\n", *p2);
    data2[0] = 500;  //正确
    printf(" *p2 = %d\n", *p2);

    //3、半指针1和const数组
    p2 = data1;
    /*
    *p2 = 500;   //错误
    printf(" *p2 = %d\n", *p2);
    data1[0] = 500;  //错误
    printf(" *p2 = %d\n", *p2);
    */

    //4、半指针2和普通数组
//  p3 = &data2[1];   //错误
    printf(" *p3 = %d\n", *p3);
//  p3 = data1; //错误,无法再指向别的数组
    printf(" *p3 = %d\n", *p3);

    return 0;
}

2018.08.15 安徽滁州

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值