关于char*, char[], string的理解
Posted akyna-zh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于char*, char[], string的理解相关的知识,希望对你有一定的参考价值。
关于char*, char[], string的理解
Author: akynazh
Blog: akynazh.site
最近写一些关于字符串的程序时遇到了一些问题,所以把这些东西复习整理一遍。
关于char[]与char*的区别
char s1[] = "abc";
cout << s1 << endl; // abc
s1[1] = 'd'; // 改变值
cout << s1 << endl; // adc
"abc"为字符串常量,s1为指针常量,即指针指向常量,指向地址不能改变,指向地址的值可变
const char* s2 = "abc"; // const是默认存在的
cout << s2 << endl; // abc
s2 = "dfs"; // 改变地址
cout << s2 << endl; // dfs
"abc"为字符串常量,s2为常量指针,指向地址可变,但指向的地址的值不能变
以上两者皆可用于函数传值
void print_str(const char * str) {
printf("%s\\n", str);
}
print_str(s1); // adc
print_str(s2); // dfs
关于string和char[],char*的关系
- string是类,string是对一个字符串的引用值
const char* s1 = "abc";
string s = s1;
cout << s << endl; // abc
s += "a";
cout << s << endl; // abca
cout << s1 << endl;
// abc 证明string只是引用了s1
- string引用字符串示例
const char *s1 = "123";
string str1 = s1; // 若要这样赋值s1必须加const
cout << str1 << endl; // 123
char s2[] = "234";
string str2 = s2;
cout << str2 << endl; // 234
- string转char*
const char* s1_1 = str1.c_str();
// c_str 转 const char*
cout << s1_1 << endl; // 123
char*,char[]与int的相互转换
int v1 = atoi(s1);
cout << v1 << endl; // 123
v1 += 1;
char str11[100];
itoa(v1, str11, 10); // 10代表十进制
cout << str11 << endl; // 124
// 下面的会失败
// const char* str111;
// itoa(v1, str111, 10); // 失败
string与int的相互转换
int val = 223;
string str3 = to_string(val);
// C++11新特性 只适用于string (char[]和char*不可以)
cout << str3 << endl; // 223
val = stoi(str3, 0, 10); // 0为起始位置 10即十进制
cout << val << endl; // 223
over
Author: akynazh
Blog: akynazh.site
以上是关于关于char*, char[], string的理解的主要内容,如果未能解决你的问题,请参考以下文章
C++笔记--关于string, char*, char[]中的‘
Java新人,关于String类中,private final char value[],到底是数组本身不可变还是数组中的值不可变