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++ 字符串指针和字符串指针数组详解相关推荐

  1. 字符串-后缀树和后缀数组详解

    文章目录 后缀树 后缀数组 概念 sa[] rk[] height[] 例题 HDU-1403最长公共子串 洛谷P2408 不同子串个数 HDU-5769Substring 后缀树 建议先了解一下字典 ...

  2. python定义字符串数组初始化_字符数组及其定义和初始化,C语言字符数组详解...

    字符数组及其定义和初始化,C语言字符数组详解 字符串的存储方式有字符数组和字符指针,我们先来看看字符数组. 因为字符串是由多个字符组成的序列,所以要想存储一个字符串,可以先把它拆成一个个字符,然后分别 ...

  3. 字符串拷贝函数:strcpy的详解及模拟实现

    字符串拷贝函数:strcpy的详解及模拟实现!!! 对于字符串拷贝函数,之前在学习字符串时候,就已经学习过,但那只是片面的学习了一下,并没有经过系统的分析!只是大概的学习了一下!在关键的地方有时候还不 ...

  4. python输入字符串并反序result_python字符串反转的四种方法详解

    python字符串反转的四种方法详解 这篇文章主要介绍了python字符串反转的四种详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用red ...

  5. c语言指针用法及实际应用详解,通俗易懂超详细

    c语言指针用法及实际应用详解,通俗易懂超详细! \\\插播一条:文章末尾有惊喜哟~/// 今天给大家来讲解一下指针. 我会由浅到深,最后联合实际应用讲解,让大家学会指针的同时,知道大佬们都用指针来干嘛 ...

  6. python字符串strip的作用_Python字符串函数strip()原理及用法详解

    Python字符串函数strip()原理及用法详解 strip:用于移除字符串头尾指定的字符(默认为空格)或字符序列.注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符. 语法:str.s ...

  7. python正则表达式提取数字比较好_python正则表达式从字符串中提取数字的思路详解...

    python从字符串中提取数字 使用正则表达式,用法如下: ## 总结 ## ^ 匹配字符串的开始. ## $ 匹配字符串的结尾. ## \b 匹配一个单词的边界. ## \d 匹配任意数字. ## ...

  8. 字符串类习题、面试题详解(第二篇)

    第一篇链接:字符串类习题.面试题详解(第一篇) 6题:回文串(竞赛基础题) 输入一个字符串,求出其最长回文子串.子串的含义是:在原串中连续出现的字符串片段.回文的含义是:正着看和倒着看相同,如abba ...

  9. 字符串输入的2种常用方法详解

    字符串输入的2种常用方法详解 一.scanf函数 1.扫描集 2.逆向使用扫描集 二.gets函数 一.scanf函数 int main() {char arr[50] = { 0 };scanf(& ...

  10. 西门子触摸屏HMI变量的指针化索引应用示例详解

    西门子触摸屏HMI变量的指针化索引应用示例详解 在实际HMI组态项目时,若有多台相同的设备的参数需要查看或显示时,可以使用变量的指针化索引功能来实现,优点是减少画面上IO域的数量,显示画面更简洁,具体 ...

最新文章

  1. 外观模式 - 设计模式学习
  2. 统计学习三要素 模型+策略+算法
  3. windows下自制动画层引擎 - 放两个demo
  4. mysql查找最高分最低分_sql查询最高分、最低分和平均分语句
  5. 云计算机有哪些特征,你知道云计算有哪些核心特征吗?
  6. 网易邮箱广告标签怎么关 163邮箱去广告标签的教程
  7. java断言assertequals_如何实现Java测试的自定义断言
  8. 计算机系统-电路设计06-振荡器的内部电路实现
  9. ARM体系的异常中断
  10. lombok 的使用
  11. html3d电子相册,3d电子相册制作软件哪个好, 自带翻页电子相册模板,电子相册生成flash等多种格式...
  12. Hive 3.1.2 国内镜像下载地址
  13. 华为ENSP配置VLAN间路由
  14. 无刷直流电动机及其控制
  15. 【NVMe2.0b 6】NVMe 队列模型
  16. 华为nova5 pro怎么升级鸿蒙系统,鸿蒙系统终于来了!这几款华为手机都可以升级了...
  17. 低成本 低功耗2.4G无线SOC芯片 nRF51802 低功耗 高性价比芯片
  18. java偶数的表达式_十六进制数大于10的正则表达式,在Java中长度应为偶数。
  19. python显示程序运行进度_显示Python程序运行进度
  20. c语言sno是什么缩写,对于教学数据库的三个基本表:S(Sno,Sname,Ssex),SC(Sno,Cno,Grade),C(Cno,Cname, Teacher), - 赏学吧...

热门文章

  1. Flink的Table API 与SQL的流处理
  2. bootstrap获取弹框数据_Bootstrap模态弹出框的实例教程
  3. 直击行业痛点!端侧模型部署的成熟解决方案有了!
  4. 一份来自清华的数据分析笔记,请查收!
  5. Spring Cloud构建微服务架构:服务容错保护(Hystrix依赖隔离)【Dalston版】
  6. tensorflow--embedding_lookup 和 embedding_lookup_sparse
  7. java和python对比----1:
  8. python FOR循环
  9. Beam概念学习系列之Pipeline 数据处理流水线
  10. 【转】JMeter学习(二十七)Jmeter常见问题