关于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[]中的‘

关于char转换成LPCWSTR的问题

关于char*p与char p[]

Java新人,关于String类中,private final char value[],到底是数组本身不可变还是数组中的值不可变

请问一些关于char类型数据转换成16进制的问题!! 以及移位操作符~ 拜托了~~~~~

java关于常用的String方法