指针字符串 与 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*` 类型变量赋值 在你的自定义函数中,如果你需要处理字符串,可能会定义参数为。 阅读详情

相关推荐

自监督预训练(三)wav2vec 2.0原理剖析

一、整体流程 二、feature encoder 理解Conv1d nn.Conv1d(in_channels=5, out_channels=20, kernel_size=3, stride=2) 假设输入input=(batch, in_channels, in_len) batch=1 in_channels=5,对应向量大小,比如word embedding in_len=10,对应word的个数 cnn内部kernel=(in_channels, kernel_size)=(5,3),相当

xmdxcsj的专栏 2万+

char * 和const char *的区别

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

m0_52399461的博客 2万+

告别电机啸叫!手把手教你配置TMC5160的StealthChop2静音模式(附参数自整定避坑指南)

本文详细介绍了如何通过配置TMC5160的StealthChop2模式彻底消除3D打印机电机噪音。从硬件准备到参数自整定,再到高级调优与异常处理,手把手教你实现实验室级别的静音效果,提升打印质量和使用体验。

weixin_33724659的博客 487

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

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

m0_73623852的博客 7973

adas硬件_ADAS智能辅助驾驶系统硬件在环(HIL)测试之硬件介绍

这篇主要分享的是ADAS融合系统的HIL测试系统的硬件结构及其作用,其主要包括上位机、机柜、雷达模拟器系统、雷达暗箱系统以及视频暗箱。 上位机 上位机主要运行HIL测试系统的相关软件,测试人员所有的前期准备工作与测试操作均在上面进行,并监控测试结果,其通过网口实现与NI实时机的通信,上位机将VeriStand项目工程下载至NI实时机运行。机柜 机柜主要由可编程电源...

weixin_39580748的博客 2242

浅谈python反序列化漏洞

0x01 python序列化与反序列化 Python 的序列化和反序列化是将一个类对象向字节流转化从而进行存储和传输,然后使用的时候再将字节流转化回原始的对象的一个过程。python中的序列化操作是通过pickle模块,而该模块主要包含l dumps将dict转化为str格式,loads将str格式转化为dict格式。 dump和load与文件操作结合起来, pickle.dump(obj, f...

Lethe's Blog 3220

const char ** 含义及用法

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

CSUC的博客 4579

Jetson工业级应用指南:用Orin NX 16GB打造多摄像头AI质检系统

本文详细介绍了如何利用NVIDIA Jetson Orin NX 16GB构建高效的多摄像头AI质检系统,涵盖硬件选型、软件优化及产线部署全流程。通过100 TOPS的AI算力和多路视频处理能力,Orin NX在工业4.0时代展现出卓越的实时缺陷检测性能,特别适合嵌入式AI应用场景。

Pepper的专栏 307

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

Oracle 19c RAC安装踩坑实录:OpenSSH 8.x版本与OUI的“兼容性战争”及一劳永逸的解决思路

本文深入解析Oracle 19c RAC在Linux8环境中部署时遇到的OpenSSH 8.x版本兼容性问题,特别是[INS-06006]错误的根源与解决方案。从协议层分析冲突本质,提供SCP包装器技术、官方补丁应用指南及现代化部署体系构建三种解决方案,帮助企业高效完成RAC安装并规避类似问题。

weixin_42648844的博客 457

Xinference新手指南(一个命令直接安装成功)

对于新手,必须得学会使用docker部署,这是基本功!这里就不过多去介绍了,如果评论要出教程的话,以后再出了。

Ven%的博客 818

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

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

Vhhsp的博客 719

078、镜头阴影校正:LSC算法原理与标定优化

文章摘要 镜头阴影校正(LSC)是手机影像系统中的关键技术,用于解决镜头渐晕效应导致的画面边缘暗角问题。本文详细分析了LSC算法的核心原理,包括非均匀网格划分、双线性插值等关键技术点,并揭示了标定流程中的常见陷阱(光源均匀性、灰卡反射特性、温度漂移)。文章还深入探讨了增益计算的工程实现细节,以及实际调优中的关键考量因素(色差校正、动态场景适应等)。作者结合15年经验,给出了包括验证方法、网格参数设计、产线标定等实用性建议,强调LSC算法应与光学设计协同优化,才能达到最佳效果。

sundong_81的博客 42

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

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

赖东东_的博客 1653

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

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、付费专栏及课程。

余额充值