字符指针赋值探究小结

Posted -believe-me

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符指针赋值探究小结相关的知识,希望对你有一定的参考价值。

1, 字符指针有初始值时,不能修改其中字符的值

#include<iostream>
using namespace std;
int main()
{
    char *p1 = "nihao";//字符指针赋值给字符指针只能读不能修改字符的值
    char *p2 = p1;
    p1[0] = 'm';//尝试修改,会报错
    return 0;
}

会报错:
技术图片

2,字符指针赋值给另外一个字符指针,接受字符串的指针也只能进行读取操作。

#include<iostream>
using namespace std;
int main()
{
    char *p1 = "nihao";//字符指针赋值给字符指针只能读不能修改字符的值
    char *p2 = p1;
    p2[0] = 'm';//尝试修改,会报错
    return 0;
}

同样报错:访问权限的问题
技术图片
3,如果想要对字符指针里面的值进行操作怎么办呢?
看例子:
1)用C语言中strcpy函数

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
int main()
{
    char *p1 = "nihao";
    char *p2=new char[sizeof(p1)+1];//new 开辟一段新的内存,注意要加上1,要加上字符串末尾‘’
    strcpy(p2, p1);//调用字符串copy函数
    p2[0] = 'm';//对新开辟的内存进行操作
    cout << p2<<endl;//输出操作后的结果
    cout << p1<<endl;//对原来字符串没有影响,原来字符串可以看做常量,不能修改。
    
}

2)可以用C++中string 类解决

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string a= "nihao";
    string b = a;
    b[2] = 'M';//将一个string a赋值给另外一个string b后,可以对b进行操作,对原来那个string a类没影响。
    /*a[1] = 'M';*/
    cout << b<<endl;//输出操作结果
    cout << a << endl;//对原来那个string a类没影响,验证结果
    
}

技术图片

补充:字符串小结

1.string 类不能赋值字符串指针
2.字符串指针可以赋值给string类
3.string 类有初始值后不能看做常量,其中的值也可以修改。(这点和字符指针常量做区分!!)
4.将一个string a赋值给另外一个string b后,可以对b进行操作,对原来那个string a类没影响

以上是关于字符指针赋值探究小结的主要内容,如果未能解决你的问题,请参考以下文章

C++ 继承与派生中的赋值兼容规则问题探究

objective-C nil,Nil,NULL 和NSNull的小结

int,char指针探究

C++字符指针数组的初始化及赋值问题

C 语言字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 形参指针间接赋值 | 返回值状态 | 形参指针处理 | 形参指针判空 | 形参返回值 )(代码

php的关于字符串类型的变量的赋值问题,谢谢