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

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490959.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工业机器人的控制方式

工业机器人的控制方式 工业机器人的控制方式目前市场上使用最多的机器人当属工业机器人&#xff0c;也是最成熟完善的一种机器人&#xff0c;而工业机器人能得到广泛应用&#xff0c;得益于它拥有有多种控制方式&#xff0c;按作业任务的不同&#xff0c;可主要分为点位控制方…

软银千亿美元愿景基金PPT,孙正义解读股权投资IRR=44%

来源&#xff1a;股权投资论坛&#xff08;PE821010&#xff09;综合“正和岛(zhenghedao)、皮卡丘财经、猎云网&#xff08;ilieyun&#xff09;、财立方&#xff08;icailifang&#xff09;、腾讯科技&#xff08;qqtech&#xff09;等综合 日本软银公司成立于1981年&#x…

c#扩展方法的理解(二:接口)

namespace ExtensionInterfaceMethod {class Program{static void Main(string[] args){//使用接口变量来调用扩展方法IBasicInterface bii new BasicImplement();bii.SubStract(9, 3); }}//先创建一个简单的接口public interface IBasicInterface{int Add(int x, …

Halcon算子学习:create_sheet_of_light_model

create_sheet_of_light_model (ProfileRegion : : GenParamName, GenParamValue : SheetOfLightModelID) 创建一个执行线结构光技术3D测量的的模型 输入&#xff1a; ProfileRegion 包含要处理的轮廓的图像的ROI。&#xff08;如果所提供的区域不是矩形的&#xff0c;则使用其…

腾讯研究院院长司晓:互联网大脑的人文侧面

1989年万维网推出至今&#xff0c;互联网已经走过了30个年头。在这激荡的30年&#xff0c;随着社交网络、移动通信、云计算、物联网、工业互联网、大数据、人工智能等新技术和新事物不断涌现&#xff0c;互联网持续建立起复杂而庞大的连接&#xff0c;成为驱动经济与社会快速变…

C++对单向链表进行排序

#include <iostream> using namespace std; struct student {int num;char name[10];float score[3];float sum;student *next; };void main() {student a[5];student *h, *curr, *temp, *last; //h头指针&#xff0c;curr当前指针&#xff0c;last当前指针的上一个指针…

第六周周总结

在第六周中是忙碌的&#xff0c;对于高数&#xff0c;上课的内容也在快速的翻篇&#xff0c;我的大脑也在快速的运转着&#xff0c;讲概念的时候我很难理解过来&#xff0c;但是讲习题的时候勉勉强强能听的懂&#xff0c;每次在听不懂的地方我都会打个问号&#xff0c;以便于自…

Halcon算子学习:get_sheet_of_light_result

get_sheet_of_light_result ( : ResultValue : SheetOfLightModelID, ResultName : ) 获得用线结构光技术进行测量的标志性结果 输出&#xff1a; ResultValue 理想的测量结果。 SheetOfLightModelID 要使用的线结构光模型的句柄 输入&#xff1a; ResultName 规定应提供何…

pytorch查看模型的可训练参数

for name, param in model.named_parameters():if param.requires_grad:print(name,:,param.size())

Oracle 循环相关

1.简单的循环以loop关键字开始, exit when子句退出循环, end loop子句为循环结束标志。DECLAREPI CONSTANT NUMBER (9, 7) : 3.1415926;RADIUS INTEGER (5);AREA NUMBER (14, 2);BEGINRADIUS : 3;LOOPAREA : PI * POWER (RADIUS, 2);DBMS_OUTPUT.put_line (半…

5G芯片Top10一览,谁才是最后的赢家?

来源&#xff1a;Electronic Products、电子工程世界从无线网络基础设施和基站到智能手机再到物联网设备应用&#xff0c;这些芯片组有望简化向5G通信的过渡。5G有望提供一个完全互联的移动世界&#xff0c;其市场范围从联网汽车、智能城市、智能手机到物联网(IoT)设备&#xf…

HALCON标定板制作、标准文件输出方法、算子讲解

利用 Halcon软件自制标定板 参考博客&#xff1a; halcon相机标定及图像矫正 Halcon学习 标定助手 关键算子&#xff1a; gen_caltab ( : : XNum, YNum, MarkDist, DiameterRatio, CalPlateDescr, CalPlatePSFile : ) 为具有矩形排列标记的标定板生成标定板描述文件和相应的后…

乘法逆元小结

在求解除法取模问题(a/b)%m时&#xff0c;我们可以转化为(a%(b∗m))/b&#xff0c; 但是如果b很大&#xff0c;则会出现爆精度问题&#xff0c;所以我们避免使用除法直接计算。 可以使用逆元将除法转换为乘法&#xff1a; 假设b存在乘法逆元&#xff0c;即与m互质&#xff0…

国产光刻机的现状究竟如何?

来源&#xff1a;人民网-上海频道随着信息社会的迅速发展&#xff0c;手机、电脑、电视等各种电子设备越来越“迷你”&#xff0c;从之前的“大哥大”到现在仅仅几个硬币厚的时尚手机&#xff0c;从老式的矮胖电视到如今轻薄的液晶电视&#xff0c;都不离开集成电路的发展&…

pytorch自定义卷积核权值参数

pytorch中构建卷积层一般使用nn.Conv2d方法&#xff0c;有些情况下我们需要自定义卷积核的权值weight&#xff0c;而nn.Conv2d中的卷积参数是不允许自定义的&#xff0c;此时可以使用torch.nn.functional.conv2d简称F.conv2d torch.nn.functional.conv2d(input, weight, biasN…

如何使用UR机器人模拟软件URsim

如何使用UR机器人模拟软件URsim 机器人软件适用版本&#xff1a;Polyscope v1.3及以上 适用机器人&#xff1a;UR3、UR5、UR10 由于优傲机器人的系统是基于Linux核心开发的&#xff0c;模拟软体URsim也是在Linux系统下运行&#xff0c;通常大家使用的电脑系统为Windows&#…

C++中派生类隐式调用与显式调用基类的构造函数

通过派生类的构造函数调用基类的构造函数有两种方式&#xff0c;隐式和显式两种。 所谓隐式方式就是在派生类的构造函数中不指定对应的基类的构造函数&#xff0c;这个时候调用的是基类的默认构造函数(即含有默认参数值或不带参数的构造函数)。而所谓显式方式&#xff0c;就是在…

中国团队新型类脑芯片登上《自然》封面

来源&#xff1a;澎湃新闻网从AlphaGo战胜人类顶级围棋选手&#xff0c;到人工智能系统以90%准确率诊断儿科疾病&#xff0c;近年来&#xff0c;人工智能的突破大多从智能的某个领域接近或超过人类智能&#xff0c;距离达到人类水平的人工通用智能&#xff08;AGI&#xff0c;A…

20145324 《Java程序设计》第6周学习总结

20145324 《Java程序设计》第6周学习总结 教材学习内容总结 第十章 1、使用输入串流将数据从来源取出 InputStream 使用输出串流将数据写入目的地 OutStream 2、dump()方法并没有限定来源或目的地真实形式&#xff0c;依赖InputStream、OutStream 3、可以使用dump()从HTTP服务器…

MATLAB Robotic Toolbox 机器人工具箱示例

程序是基于Matlab2016a&#xff0c;工具箱版本为Robotic Toolbox 10.2 参考博客&#xff1a; MATLAB机器人工具箱使用 Matlab Robotic Toolbox V9.10工具箱(三)&#xff1a;轨迹规划 六轴机器人建模方法、正逆解、轨迹规划实例与Matalb Robotic Toolbox 的实现 效果&#xff1a…