广州天河区网站设计公司,班级优化大师官方网站,wordpress 跳转链接,网站备案座机C处理字符串有两种方式#xff0c;即#xff1a;指针方式和数组方式
数组方式#xff1a;char a[] HelloWorld;指针方式#xff1a;const char* s HelloWorld; const可以忽略
接下来详细讲解一下字符串指针
首先#xff0c;为什么字符串可以…C处理字符串有两种方式即指针方式和数组方式
数组方式char a[] HelloWorld;指针方式const char* s HelloWorld; const可以忽略
接下来详细讲解一下字符串指针
首先为什么字符串可以直接赋值给指针即char* s HelloWorld不会报错不应该是把字符串的地址赋值给指针吗
原因这里的双引号做了3件事
1.申请了空间(在常量区)存放了字符串 2. 在字符串尾加上了/0 3.返回地址
为什么字符串指针的指针名输出字符串内容而不是地址
字符串指针的指针名代表字符串的首地址但输出字符串指针名时输出的却是完整字符串如下 char* s HelloWorld;coutsendl; //s是字符串的首地址但却输出HelloWorldcout*sendl; //输出Hcout*(s1)endl; //输出es1是第二个字符的地址cout static_castvoid *(s) endl; //此时输出的才是字符串地址
原因是C标准库中I/O类对操作符重载在遇到字符型指针时会将其当作字符串名来处理输出指针所指的字符串。既然这样那么我们就别让它知道那是字符型指针所以得用到强制类型转换用static_cast把字符串指针转换成无类型指针
字符串指针指向的地址可以修改但所指向的字符串内容不能修改因为字符串常量是不能改变的 char* s HelloWorld;sabcd; //合法cout*(s1)endl;*(s1)d; //不合法这里虽然没报错但这一句实际下一句并未执行coutsendl; //未执行
字符串指针数组 char *p[6]{ABCD,EFGH,IJKL,MNOP};int i;for(i0;i4;i) coutp[i]endl; //输出每个字符串实际上p[i]为第i个字符串的首地址for(i0;i4;i) cout*p[i]; //输出每个字符串第一个字符AEIMcoutendl;for(i0;i4;i) cout*(p[i]1); //输出每个字符串第二个字符BFJN