指针字符串 与 const char * 即const * char 的详细使用讲解

C++字符串拼接陷阱:std::string与const char*混合操作解析 在C++编程中,字符串处理是基础且高频的操作,涉及std::string与C风格字符串(const char*)的混合使用。其核心原理在于C++运算符重载机制:std::string类重载了+运算符以实现拼接,而const char*作为指针类型,直接参与+运算会触发指针算术,导致未定义行为。理解这一机制的技术价值在于编写出类型安全、性能高效的代码,避免运行时崩溃或数据错误。常见的应用场景包括文件路径拼接、日志信息生成、网络协议组装等。本文聚焦于**字符串拼接**与**类型安全**问题,通过分析典型错误案例 阅读详情

指针字符串的使用问题

在这里插入图片描述
一、直接定义字符串指针的使用注意事项

  1. 定义字符串指针的时候 const char *, 和字符串本身相同,就不会出现警告
  2. const char * == char const *,
  3. 作用:const char * p ,表示的是指针p指向的数值不能修改, 但是可以通过本身自己去修。
  4. 不能通过指针修改指针对应的数值,但是其对应的数值,可以通过本身修改

二、会出现警告的版本,能正常输出,但是不能修改

int main()
{
    char *str = "hellow"; 
    cout << str << endl;
    return 0;
}

输出结果
在这里插入图片描述
虽然左边是char * 类型,但是无法修改的版本

int main()
{
    char *str = "hellow"; 
    str[2] = 'a';
    cout << str << endl;
    return 0;
}

三、可以修改的版本

int main()
{
    char s2[] = "world";
    char *p = s2;
    *p = 'a';
    cout << s2 << endl;
    return 0;
}
  1. 先必须确定右边的字符串放入字符数组中
  2. 然后才可以修改。

四、关于const char * 使用测试

int main()
{
    char s[] = "hellow";
    const char *p = s;
    cout << p << endl;  //输出 hellow
    // *(p) = 'f';  //错误:向只读位置赋值
    // cout << p << endl;
    s[0] = 'f';
    cout << p << endl;//输出 fellow
    return 0;
}
  1. const char * 表示 不能修改 指针 指向的 地址的 内容
  2. 但是地址是可以 改变的, 参照第五条对比
  3. 但是可以通过本身进行修改

五、char * const

int main()
{
    char s[] = "hellow";
    char * const p = s;
    char s2[] = "good";
    // p = s2; //错误:向只读变量‘p’赋值
    p[0] = 'f';
    cout << p << endl; //fellow
    return 0;
}
  1. 表示 指针p指向的 地址 是 无法改变的
  2. 至于 指向的 地址 所存放的内容 是可以 改变的
  3. 可以对比 const char *
int main()
{
    char s[] = "hellow";
    const char *  p = s;
    char s2[] = "good";
    p = s2;
    cout << p << endl; //good
    return 0;
}

参照:
1、https://blog.youkuaiyun.com/SilentOB/article/details/76994618
【const char * 、char const *、 char * const 三者的区别】

C++笔记之如何给 `const char*` 类型变量赋值 在你的自定义函数中,如果你需要处理字符串,可能会定义参数为。 阅读详情

相关推荐

RTL8211F千兆PHY原理图与PCB设计:从手册到量产的完整指南

在工业网关、边缘计算和FPGA/CPU以太网扩展设计中,千兆PHY芯片的稳定运行取决于外围电路的精细设计。RTL8211F(I)作为应用广泛的物理层收发器,其原理图设计涉及电源域划分、时钟与复位时序、RGMII/ MDIO接口匹配以及MDI差分网络等多个环节。正确理解数据手册的阅读顺序,掌握100Ω差分阻抗控制、等长约束和EMI布局技巧,是保证链路可靠性和信号完整性的关键。本文从芯片选型与数据手册解析切入,系统梳理从电源去耦到PCB布局布线的工程实践要点,帮助工程师规避Link不稳定、MDIO读取失败、吞吐

weixin_28721917的博客 349

char * 和const char *的区别

一、含义的不同 char* 表示一个指针变量,并且这个变量是可以被改变的。 const char*表示一个限定不会被改变的指针变量。 二、模式的不同 char*是常量指针,地址不可以改变,但是指针的值可变。 const char*是指向常量的常量指针,地址与值均不可变。 三、指针指向的内容的不同 char*指针指向的内容是可以改变的,是不固定的。赋值后在数据传递的过程中允许改变。 const char*指针指向的内容是固定的,不可改变的。对传入的参数,不会对指针指向的内容进行修改 四、意义

m0_52399461的博客 2万+

PLC1200使用CB1241RS485通讯模块做从站进行Modbus Rtu通信

添加新设备(PLC)->设备和网络管理->点击PLC->看到硬件目录选择通信板->点到点->CB1241(RS485)->看到6ES7241-1CH30-1XB0选择添加,如图。指向Modbus保持寄存器数据块的指针 我这里指向了自定义的DB块数据中一个INT数组。在通信->通信处理模块->MODBUS(选择不带RTU的通信指令块)注意:接线时,TRA接485调试模块的B- TRB接调试模块的A+组态后的硬件标识符 270 对应自己组态后自动生成的。1:事务完成,且无任何错误。波特率对应自己使用的。

swmyaopeng的博客 2万+

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

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

m0_73623852的博客 7973

量化策略分享之ST股弱转强,回测年化123%

本策略的核心是精选ST股票,国九条过滤,防止直接暴雷退市,只做ST股票的弱转强,弱转强的认定标准是前日涨停但昨日不涨停,昨日收盘价大于前一日最低价,昨日收盘价大于10日线,昨日成交量大于前一日的成交量但小于前一日成交量的10倍,股价大于1;这类股票强势,有资金介入,能获得超额收益。

qq_29301281的博客 1268

【算法设计与分析】期末复习题(超详细)

刚刚整理了一下电脑的文件,发现了这份上学期的算法设计与分析期末复习题,有需要的文后自取。

a1234567822的博客 6614

const char ** 含义及用法

在C或C++中,const char是一个指向指针的指针,它指向的指向一个const char 类型的数据,也就是一个字符串常量。

CSUC的博客 4579

3 ATK2(AUTOSAR OS)代码移植-目标硬件及编译环境简介

该部分介绍ATK2代码移植的目标硬件以及编译环境

xiaoduanduansad的博客 718

const char *、char const *、char* const、const char *const、char const *const之间的区别

前言 char = greeting[] = "Hello"; char *p = greeting; //non-const pointer,non-const data const char *p = greeting; //non-...

鬼刀 3006

在 ABAP Cloud 里优雅地调用 HTTP 服务:新一代 HTTP Client 全面实践与落地指南

摘要: 随着ABAP Cloud时代的到来,HTTP通信在SAP系统集成中的角色日益重要。传统CL_HTTP_CLIENT存在维护成本高、边界模糊等问题,而新一代ABAP HTTP Client采用Destination驱动的调用方式,通过CL_HTTP_DESTINATION_PROVIDER支持四种创建方式(URL、通信安排、BTP Destination服务、SM59连接)。该模型将连接配置与业务逻辑分离,使URL、认证等参数可集中管理。典型调用流程包括:基于Destination创建Client,设

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 251

基于STM32的设计智慧超市管理系统(带收银系统+物联网环境监测)_167

本系统主要由超市环境监测部分和商品管理部分组成。环境监测部分主控芯片采用STM32F103C8T6,主要包括温湿度传感器、烟雾传感器和空调制热开关、空调制冷开关,采集的数据通过ESP8266模块+MQTT协议上传至OneNet云平台,在OneNet云平台设计手机和电脑版本可视化页面,能够在页面上查看超市的环境信息,还能在页面上手动打开空调制热开关和空调制冷开关。商品管理部分主要由RC522-RFID读卡器、上位机组成,实现商品选购、结算、顾客的VIP会员卡注册管理等功能。

6069

string、const char *、char *的区别和应用

这里显示实参和形参不兼容,这是因为形参是char *值可以进行更改,但是实参是 const char *值不可更改,将它传给char *类型存在修改值的风险,因此发生错误。解决方法要么将常字符串(const char*)转化为char *,要么将形参char *改为const char *。const char*封锁的是指针指示的内容,这个对应这常字符串。封锁的是指针所指的值,也就是说*p不可更改,但p可以更改。封锁的是指针自己,也就是p不能更改,但*p可以更改。print((char*)"输入字符");

Vhhsp的博客 719

捷联惯导,其实没有你想象的那么复杂!(附:惯导嵌入式应用中需要的一些C代码)

摘要:捷联惯导系统将惯性测量单元固连于运动载体,通过核心算法实现导航解算。系统首先进行传感器误差补偿和初始对准,然后利用陀螺和加速度计数据,通过姿态更新算法(如四元数法)计算载体相对于地理系的姿态。加速度数据经比力方程转换后积分得到速度和位置,过程中需补偿圆锥误差和划船效应。捷联惯导通过数字平台替代物理平台,实现了载体坐标系与导航坐标系的实时转换,是当前惯性导航系统的主流方案。

victoryqian528的博客 269

【C语言】char * 、char [ ]、const char * 和 void *的使用以及区别

本文介绍了C语言中字符指针(char *)、字符数组(char [])和字符串常量(const char *)的初始化、赋值及使用注意事项。字符指针可以指向字符串常量但会触发编译器警告,因为字符串常量是只读的;字符数组可通过字符串字面量或字符列表初始化,但不能直接赋值;字符串常量(const char *)存储在常量区,内容不可修改。文章还详细解释了const关键字的作用及内存布局,包括栈区、堆区和数据段的不同区域,并强调了多线程环境下共享资源的竞态风险。最后提醒开发者在操作字符串时应谨慎处理终止符'\0'

赖东东_的博客 1653

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

const char * 转换为 char *

const char * 转换为 char *<br />指向const的指针不能被赋给指向非const的指针,所以应该用strcpy,也就是另开一块内存,把字符一个个复制过去const char *expr = "goodidea";char *buf = new char[strlen(expr)+1];<br />strcpy(buf, expr);<br />strcpy  <br />原型:extern char *strcpy(char *dest,char *src);<br />用法:#in

god9me的专栏 1842

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

c++ const char* 使用

#include <iostream> using namespace std; void ShowMessage(const char* msg) { cout << msg << "\n"; } int main() { const char* p = "大家好"; ShowMessage(p); char msg[] = "大家好"; ShowMessage(msg); }

dxm809的博客 1602

常量指针与指针常量习题(一)

D选项是正确的,因为node是一个指向字符串常量的指针,可以修改指针指向的地址,让它指向新的字符串常量"xyz"。B错误:node[2]是字符'C',而*node[2]试图将字符当作地址进行解引用操作,这是错误的语法。A错误:node[2]表示访问字符串的第3个字符'C',由于原字符串是常量,不能直接修改其中的字符。const后面是*,则表面指针的指向不能变。const后面是int则表明a的值不能变。如果const跟着的是类型修饰符,则修饰该符,否则修饰它前面的符。const与static的修饰技巧。

qq_59167692的博客 662

c语言 char 转go,c中的char数组怎么转换成go的string?

满意答案wangginger2018.04.05采纳率:53%等级:12已帮助:5517人如何从string 转换为const char *和char * 附带string中c1、如果要将string转换为char*,可以使用string提供的函数c_str() ,或是函数data(),data除了返回字符串内容外,不附加结束符'\0',而c_str()返回一个以‘\0’结尾的字符数组。2...

weixin_28769989的博客 1856

C++ 中 char*、const char*、char* const、const char* const 的详细区别

C++ 中 char*、const char*、char* const、const char* const 的详细区别

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 1715

C++ 中 char\ 、const char\ 、char\ const、const char\ const 的区别:一篇彻底讲清指针与 const 的组合

fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;是否是否是否声明: X ptrconst 在 * 左侧?指向的内容不可修改指向的内容可以修改const 在 * 右侧?const 在 * 右侧?指针和内容都不可修改指向的内容不可修改指针可修改内容可修改指针不可修改char*内容和指针都可修改这四种声明的本质区别在于。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1225

const char * 、char const *、 char * const 三者的区别

C/C++ 中关于以下三种定义: const char *ptr; char const *ptr; char * const ptr; 现整理三者之间的区别与联系。 一、const char *ptr; 定义一个指向字符常量的指针,这里,ptr是一个指向 char* 类型的常量,所以不能用ptr来修改所指向的内容,换句话说,*ptr的值为const,不能修改。但是ptr的声明并...

荒的博客 14万+

const char*, char const*, char*const使用时的区别

案例1: #include using namespace std; void main(void) { // char* a 与 char a[] 的区别 char* a = "abcdef"; // a为一指针,其值可以改变。现在a指向的是一常量字符串 cout << a << endl; a = "ghijkl"; // a现在指向另一常量

Tham 在思索中前行! 1万+

const char*和char const*和const char * const

String.h文件 #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class String { public: String() { s = NULL; } String(const char *str); friend bool operator&gt;(String &amp;stri...

sprite_Yang的博客 1万+

c语言const unsigned char,char * /const char */unsigned char * 转换

BYTE bArray[16];CHAR *cArray[17] ;//BYTE 转 Char *_tcscpy( cArray , (CHAR *)bArray);------------------------------------------------------------------------------//CString 转unsigned char* --- 非U...

weixin_42365176的博客 6353

【C++】 char*,char[],const char*(char const *) ,char* const

const char*,封禁星号,值不能变,但可以变地址; char* const,封禁地址,地址不能变,而且值也不能变。值不能变是因为char*不支持变量修改,所以这个值就怎么也不能变。相当于该变量是一个固定内存中存了一个不可改变的字符串,地址和字符串都不能变。这个字符串可以赋值给char*,却不能赋值给char[],我认为是由于C++自己定义时就确定了char*不可变,char[]可变,所...

mjiansun的专栏 2494

const char* 和 char* 、字符串常量

注:凡是说道字符串,基本就是字符串常量。 看到这么一句话:提到const char*,就认为这个指针指向的是字符串。 根据之前对常量指针和指针常量的理解,const char* p,表示一个常量指针,也就是指针指向的是常量,不能通过指针对数值进行修改。也就是*p=XXX,是错误的用法。 为什么const char*就是针对字符串是用的呢,因为这是一个常量指针,字符串是常量,而且是存储在系统负责管理的常量存储区中的,编译器无权对其进行修改。而且又是char类型的指针,还是一个常量指针,自然就能够与字符串

qq_39224221的博客 6442
上一篇: 链式前向星代码实现与理解
下一篇: c++文件读写的三种方式(输入输出重定向、fopen、文件输入输出流)
Continue!
博客等级 码龄9年 66粉丝 40原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值