C语言07---指针进阶

指针万能拆解法

char型指针

char型指针实质上跟别的类型的指针并无本质区别,但由于C语言中的字符串以字符数组的方式存储,而数组在大多数场合又会表现为指针,因此字符串在绝大多数场合就表现为char型指针。

  • 定义:
char *p = "abcd";    //这里"abcd"为字符串常量,p指向字符串常量"abcd"存储的位置入口地址,
                     //并且这里p只能访问字符串常量,不能通过指针改变字符串常量的值。

多级指针

任何的指针实际上都是一个用于存储内存地址的一个变量而已,其他的描述都是对该地址的类型进行的。

  • 如果一个指针变量 p1 存储的地址,是另一个普通变量 a 的地址,那么称 p1 为一级指针
  • 如果一个指针变量 p2 存储的地址,是指针变量 p1 的地址,那么称 p2 为二级指针
  • 如果一个指针变量 p3 存储的地址,是指针变量 p2 的地址,那么称 p3 为三级指针
  • 以此类推,p2、p3等指针被称为多级指针
  • 示例:
int a = 100;
int   *p1 = &a;  // 一级指针,指向普通变量
int  **p2 = &p1; // 二级指针,指向一级指针
int ***p3 = &p2; // 三级指针,指向二级指针

void型指针

  • 概念:无法明确指针所指向的数据类型时,可以将指针定义为 void 型指针
  • 要点:
    1. void 型指针无法直接索引目标,必须将其转换为一种具体类型的指针方可索引目标
    2. void 型指针无法进行加减法运算(当前gcc version 11.4.0版本可以编译但是加减按一个字节偏移)
  • void关键字的三个作用:
    1. 修饰指针,表示指针指向一个类型未知的数据。
    2. 修饰函数参数列表,表示函数不接收任何参数。
    3. 修饰函数返回类型,表示函数不返回任何数据。

const 型指针

  • const型指针有两种形式:①常指针 ②常目标指针
  1. 常指针:const修饰指针本身,表示指针变量本身无法修改。

  1. 常目标指针:const修饰指针的目标,表示无法通过该指针修改其目标。

  • 常指针在实际应用中不常见。
  • 常目标指针在实际应用中广泛可见,用来限制指针的读写权限(保护指针所指向的内存数据不被修改)
  • 一般常目标指针会出现在函数的形参(参数列表)中 ,用于保护指针所指向的内容不被修改。
  1. 常目标常指针

const  int * const ptr = &a ;

该指针比较极端,他的指向无法在后期被修改,并也无法通过它来修改它指向的内存中的数据。

总结:

    • 常目标指针:可以改变指向,但不可改变指向的数据。
    • 常指针: 可以改变指向的数据的内容,但不可改变指向。
    • 常目标常指针: 以上两个都不能改。

结语:

        通过本篇博客,我们深入探讨了指针的高级用法以及它们在现代编程中的重要性。指针不仅可以帮助我们优化内存使用,还能提升程序的灵活性和可扩展性。从指针算术、指向指针的指针、到动态内存管理,掌握这些概念将使我们能够编写更高效、清晰的代码。

        指针是C和C++等语言的核心特性之一,理解其背后的原理对于编写健壮的程序至关重要。同时,正确使用指针也能帮助新手开发者避免常见的错误,比如内存泄漏和空指针解引用等。

        希望本文能帮助您在指针的学习之旅中更进一步,并激发您在实际项目中大胆应用这些知识。指针虽然复杂,但掌握它们后,您将发现无尽的可能。

        感谢阅读,期待在未来的文章中与您分享更多关于编程的深入探讨!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值