c/c++ char * char[] string 的区别及转换
太久没写c/c++代码了,写了剑指offer的一道题,就把自己整懵了,真的不好意思说自己学过算法,打过一点比赛
主要还是对指针的概念模糊
写一下关于 char * char[] string 的区别及转换
字符数组 char p1[] 编译器会在末尾自动加上'\0' p1 = &p1[0] cout << p1 直接输出这个字符串,本质就是通过这个地址
char *p 定义一个指针变量p,其指向char类型的地址(变量保存的地址所在内存单元中的数据类型为char),无论指向的是哪种类型,指针本身的类型都是整型,因为保存的是地址
1 int main() { 2 char p1[] = "hello c++"; 3 char *p2 = "hello c++"; 4 cout << p1 << endl << p2 << endl; 5 cout << *p1 << endl << p2[0] << endl; 6 return 0; 7 }
输出:
从输出可以看出,char *p2 和 char p1[]没有区别,但是char *p2 指向的区域是常量无法修改
1 int main() { 2 char p1[] = "hello c++"; 3 char *p2 = "hello c++"; 4 p2[0] = 'a'; 5 cout << p2; 6 return 0; 7 }
修改p2的指,程序运行就会出错,但可以修改p2所指向的地址
1 int main() { 2 char p1[] = "hello c"; 3 char *p2 = "hello c++"; 4 p2 = p1; 5 cout << p2 << endl; 6 p1[0] = 'a'; 7 cout << p2 << endl; 8 return 0; 9 }
可以看到p2的值被修改,与p1指向同一个地址
即p2本身是变量,但指向的区域是常量
本质区别
当定义 char p[10] 时,编译器会给数组分配十个单元,每个单元的数据类型为字符
定义 char *s 时, 这是个指针变量,只占四个字节,用来保存一个地址
string是C++中定义的在C中没有,推荐使用string
string转char *
1 char t[10]; 2 string str = "abc"; 3 strcpy(t,str.c_str());
char * 转string
1 int main() { 2 char t[10] = "abc"; 3 string str = t; 4 cout << t; 5 return 0; 6 }
参考资料:
- http://www.imooc.com/article/30475
- https://www.cnblogs.com/ZY-Dream/p/10038503.html
- https://blog.csdn.net/u014038273/article/details/77649525