指针:void* , const详解

这节我们接着往下讲解指针。

void*

先介绍几种常见的指针类型:
        char*         指向字符的指针
        short*        指向短整形的指针
        int*            指向整型的指针
        float*         指向单精度浮点型的指针
        ......

还有一种指针是:void*

这是无具体类型的指针(泛型指针)可以接受任何类型地址,但也有局限性,它不可以直接进行指针的加减和解引用运算

这里我们首先先说明一下无具体类型指针是什么

      下面是我们给出的代码:(vs2022)

就比如这个,我们的编译器很明确的指出了地址和指针类型不兼容 ,这样会造成数据截断,有可能会丢失重要信息 ,而下面这个使用void*就不会出现地址和指针类型不兼容的情况了。

那么下面这段代码就向我们证明了void*是无具体类型的指针(泛型指针),void*可以接受任何类型地址

在我们不清楚存储的数据类型时最好使用void*指针                                                                             

接着我们来解释为什么 它不可以直接进行指针的加减和解引用运算

给出代码:

这两幅图可以看出void*不可以直接进行指针的加减和解引用运算,void*这种无具体类型的指针无法确定引用时访问几个字节,所以void*无法解引用,进行加减时同样也无法判断访问几个字节,所以也不能进行加减运算。

void*指针无法进行加减和解引用,那么void*有什么用呢?

//一般void*类型的指针是使用在函数参数部分,用来收取不同类型数据的地址,这样的设计可以实现泛型编程的效果。可以让一个函数来处理多种类型的数据

这里我们先简单了解void*指针就可以,后面会详细介绍它的。

const

变量是可以修改的,如果我们把变量的地址放在一个指针变量里,我们也可以通过指针变量修改这个变量。

但是当我们希望限制一个变量,让它不能被修改时,我们需要使用const

我们对比一下下面的两幅图可以清楚的发现被const限制的变量是无法进行修改的,第二幅图中的a就具有了常属性,但是a并不是常量,我们在第三幅图中验证一下。(C++中const修饰的变量是常量)

当一个变量被const修饰,但你必须要改变它的值时,那我们可以用下面代码展示的方法:

const修饰指针变量

 const可以放在*的左边,也可以放在*的右边,但是这两种的意义不同。具体看下面代码:

通过上面的两幅图不难看出const修饰指针变量的时候放在*的右边的意义是:限制的是指针变量的本身,指针变量不能再指向其他变量了,但是可以通过指针变量修改指针变量指向的内容。

而我们可通过下面这两幅图看出当const放在*的左边时,限制的是指针指向的内容,不能通过指针修改指针指向的内容,但是可以修改指针变量本身的值(修改的是指针变量的指向)

然而当我们在*的左边和右边都放上const时,指针指向的内容和指针变量本身 就都被限制了,此时它们都无法被修改,如下代码演示:

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值