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 }

 

参考资料:

  1. http://www.imooc.com/article/30475
  2. https://www.cnblogs.com/ZY-Dream/p/10038503.html
  3. https://blog.csdn.net/u014038273/article/details/77649525

 

posted @ 2020-04-04 21:57  世味  阅读(1155)  评论(0编辑  收藏  举报