C++ 字符串指针和字符串指针数组详解
C++处理字符串有两种方式,即:指针方式和数组方式
- 数组方式:char a[] = "HelloWorld";
- 指针方式:const char* s = "HelloWorld"; const可以忽略
接下来详细讲解一下字符串指针
首先,为什么字符串可以直接赋值给指针,即char* s = "HelloWorld"不会报错,不应该是把字符串的地址赋值给指针吗?
原因:这里的双引号做了3件事:
- 1.申请了空间(在常量区),存放了字符串
- 2. 在字符串尾加上了'/0'
- 3.返回地址
为什么字符串指针的指针名输出字符串内容而不是地址?
字符串指针的指针名代表字符串的首地址,但输出字符串指针名时输出的却是完整字符串,如下:
char* s = "HelloWorld";cout<<s<<endl; //s是字符串的首地址,但却输出HelloWorldcout<<*s<<endl; //输出Hcout<<*(s+1)<<endl; //输出e,s+1是第二个字符的地址cout <<static_cast<void *>(s) << endl; //此时输出的才是字符串地址
原因是C++标准库中I/O类对<<操作符重载,在遇到字符型指针时会将其当作字符串名来处理,输出指针所指的字符串。既然这样,那么我们就别让它知道那是字符型指针,所以得用到强制类型转换,用static_cast把字符串指针转换成无类型指针
字符串指针指向的地址可以修改,但所指向的字符串内容不能修改,因为字符串常量是不能改变的
char* s = "HelloWorld";s="abcd"; //合法cout<<*(s+1)<<endl;*(s+1)='d'; //不合法,这里虽然没报错,但这一句实际下一句并未执行cout<<s<<endl; //未执行
字符串指针数组:
char *p[6]={"ABCD","EFGH","IJKL","MNOP"};int i;for(i=0;i<4;i++) cout<<p[i]<<endl; //输出每个字符串,实际上p[i]为第i个字符串的首地址for(i=0;i<4;i++) cout<<*p[i]; //输出每个字符串第一个字符AEIMcout<<endl;for(i=0;i<4;i++) cout<<*(p[i]+1); //输出每个字符串第二个字符BFJN
C++ 字符串指针和字符串指针数组详解相关推荐
- 字符串-后缀树和后缀数组详解
文章目录 后缀树 后缀数组 概念 sa[] rk[] height[] 例题 HDU-1403最长公共子串 洛谷P2408 不同子串个数 HDU-5769Substring 后缀树 建议先了解一下字典 ...
- python定义字符串数组初始化_字符数组及其定义和初始化,C语言字符数组详解...
字符数组及其定义和初始化,C语言字符数组详解 字符串的存储方式有字符数组和字符指针,我们先来看看字符数组. 因为字符串是由多个字符组成的序列,所以要想存储一个字符串,可以先把它拆成一个个字符,然后分别 ...
- 字符串拷贝函数:strcpy的详解及模拟实现
字符串拷贝函数:strcpy的详解及模拟实现!!! 对于字符串拷贝函数,之前在学习字符串时候,就已经学习过,但那只是片面的学习了一下,并没有经过系统的分析!只是大概的学习了一下!在关键的地方有时候还不 ...
- python输入字符串并反序result_python字符串反转的四种方法详解
python字符串反转的四种方法详解 这篇文章主要介绍了python字符串反转的四种详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用red ...
- c语言指针用法及实际应用详解,通俗易懂超详细
c语言指针用法及实际应用详解,通俗易懂超详细! \\\插播一条:文章末尾有惊喜哟~/// 今天给大家来讲解一下指针. 我会由浅到深,最后联合实际应用讲解,让大家学会指针的同时,知道大佬们都用指针来干嘛 ...
- python字符串strip的作用_Python字符串函数strip()原理及用法详解
Python字符串函数strip()原理及用法详解 strip:用于移除字符串头尾指定的字符(默认为空格)或字符序列.注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符. 语法:str.s ...
- python正则表达式提取数字比较好_python正则表达式从字符串中提取数字的思路详解...
python从字符串中提取数字 使用正则表达式,用法如下: ## 总结 ## ^ 匹配字符串的开始. ## $ 匹配字符串的结尾. ## \b 匹配一个单词的边界. ## \d 匹配任意数字. ## ...
- 字符串类习题、面试题详解(第二篇)
第一篇链接:字符串类习题.面试题详解(第一篇) 6题:回文串(竞赛基础题) 输入一个字符串,求出其最长回文子串.子串的含义是:在原串中连续出现的字符串片段.回文的含义是:正着看和倒着看相同,如abba ...
- 字符串输入的2种常用方法详解
字符串输入的2种常用方法详解 一.scanf函数 1.扫描集 2.逆向使用扫描集 二.gets函数 一.scanf函数 int main() {char arr[50] = { 0 };scanf(& ...
- 西门子触摸屏HMI变量的指针化索引应用示例详解
西门子触摸屏HMI变量的指针化索引应用示例详解 在实际HMI组态项目时,若有多台相同的设备的参数需要查看或显示时,可以使用变量的指针化索引功能来实现,优点是减少画面上IO域的数量,显示画面更简洁,具体 ...
最新文章
- 外观模式 - 设计模式学习
- 统计学习三要素 模型+策略+算法
- windows下自制动画层引擎 - 放两个demo
- mysql查找最高分最低分_sql查询最高分、最低分和平均分语句
- 云计算机有哪些特征,你知道云计算有哪些核心特征吗?
- 网易邮箱广告标签怎么关 163邮箱去广告标签的教程
- java断言assertequals_如何实现Java测试的自定义断言
- 计算机系统-电路设计06-振荡器的内部电路实现
- ARM体系的异常中断
- lombok 的使用
- html3d电子相册,3d电子相册制作软件哪个好, 自带翻页电子相册模板,电子相册生成flash等多种格式...
- Hive 3.1.2 国内镜像下载地址
- 华为ENSP配置VLAN间路由
- 无刷直流电动机及其控制
- 【NVMe2.0b 6】NVMe 队列模型
- 华为nova5 pro怎么升级鸿蒙系统,鸿蒙系统终于来了!这几款华为手机都可以升级了...
- 低成本 低功耗2.4G无线SOC芯片 nRF51802 低功耗 高性价比芯片
- java偶数的表达式_十六进制数大于10的正则表达式,在Java中长度应为偶数。
- python显示程序运行进度_显示Python程序运行进度
- c语言sno是什么缩写,对于教学数据库的三个基本表:S(Sno,Sname,Ssex),SC(Sno,Cno,Grade),C(Cno,Cname, Teacher), - 赏学吧...
热门文章
- Flink的Table API 与SQL的流处理
- bootstrap获取弹框数据_Bootstrap模态弹出框的实例教程
- 直击行业痛点!端侧模型部署的成熟解决方案有了!
- 一份来自清华的数据分析笔记,请查收!
- Spring Cloud构建微服务架构:服务容错保护(Hystrix依赖隔离)【Dalston版】
- tensorflow--embedding_lookup 和 embedding_lookup_sparse
- java和python对比----1:
- python FOR循环
- Beam概念学习系列之Pipeline 数据处理流水线
- 【转】JMeter学习(二十七)Jmeter常见问题