C++中const char*、char const*和char * const的区别详解

    摘要:在C++中,我们经常会遇到const char*、char const*和char * const这三种指针类型的定义,但是它们之间的区别很容易混淆。本文将详细解释这三种指针类型的区别,并通过示例代码进行说明。

正文:

在C++中,指针是一种非常重要的数据类型,它允许我们间接访问内存中的数据。在指针的定义中,我们常常会遇到const char*、char const*和char * const这三种类型,它们看起来很相似,但实际上有着不同的含义和用法。

const int abc = 12;//abc的值不能在再改变
//如下
abc = 15;//编译会报错提示abc的左值存在问题


    char* p与const 混用:


   1、const char* p:

    char str[] = "I LOVE CHIAN!";
    const char* p;//代表p指向的东西不能通过p来修改(p指向的目标,那个目标中的内容不能通过p来修改);
    p = str;
    *p = 'Y';//此时这里会编译错误
    p++;//地址也可以被改变;
    //s虽然不能修改*p,但可以通过其他修改;
    //如:
    str[0] = 'Y';//这样通过修改str中的内容可以修改*p中指向的内容,即间接修改

2、char const*:  等价于const char*;

用法如上,这里不过多解释

 3、char * const:

    char str[] = "I Love China!";
    char* const p = str;*//此时char *const p定义的时候必须初始化。
                         //p一旦指向了一个东西之后,就不可以在再指向其他东西了。即p++不可以用了
    //事例如下:
    p++;//这里会报错p不能再改变;
    *p = 'Y';//这里不会报错,指向的内容可以被修改;
    //总结:const char*p(char const*p)与char* const区别:
      //(1)const char*p(char const*p)指向的内容不能再改变
      //     char* const p指向的内容可以再被改变
      //(2)const char*p(char const*p)指向的地址可以被改变,即可以p++
      //     char* const p指向的地址不能再改变,即不可以p++

4、const char * const p = str 等价于 char const * const p=str


    p的指向不能改变,p指向的内容也不能被改变;

5、 补充:

    int i = 100;
    const int& a = i;//代表a的内容不能通过a来修改
    i = 500;
    a = 1000;//这里不合法


    int& b = 31;//错误的
    const int& b = 31;//可以编译,分配了一块内存的。后续也不可以给b赋新值

总结:const char*p(char const*p)与char* const区别:


      (1)const char*p(char const*p)指向的内容不能再改变
               char* const p指向的内容可以再被改变


      (2)const char*p(char const*p)指向的地址可以被改变,即可以p++
               char* const p指向的地址不能再改变,即不可以p++

      (3)const char* const p(char const* const p):指向的内容和地址都不能再被改变

  • 11
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
string_view和string都是C++ STL的字符串类型,但它们有着不同的特点和用途。 string是C++常用的字符串类型,它是一个可变长的字符串容器,可以动态增加或删除字符。它存储的字符串是一个连续的字符数组,可以通过下标或迭代器进行访问和修改。string支持很多字符串操作,如查找、替换、插入、删除、子串等。 string_view是C++17新增的类型,它是一个不可变的字符串视图。它本质上是一个只包含指向原始字符串的指针和长度信息的结构体,它不拥有原始字符串的内存空间,也不会对原始字符串进行修改。它主要用于读取和处理字符串,可以提高程序的效率和安全性。string_view可以用于任何可以转换为const char*的类型,如string、字符数组、字面量等。 下面是string_view和string的区别和联系: 1. 内存管理方式不同:string拥有自己的内存空间,而string_view不拥有内存空间,只是指向原始字符串的一个视图。 2. 可变性不同:string是可变的,可以修改字符串内容;而string_view是不可变的,只能读取字符串内容。 3. 使用场景不同:string_view主要用于只读操作,可以提高程序效率和安全性,特别是在处理大量字符串时。而string则适用于需要频繁修改字符串的场景。 4. 接口相似:string_view和string都支持类似的操作,如查找、比较、子串等。 总之,string_view和string都是C++常用的字符串类型,它们各有优点和适用场景。在实际编程,可以根据需要选择合适的字符串类型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值