c/c++ char * char[] string 的区别及转换

过久没写c/c++代码了,写了剑指offer的一道题,就把本身整懵了,真的很差意思说本身学过算法,打过一点比赛html

主要仍是对指针的概念模糊c++

写一下关于 char * char[] string 的区别及转换算法

字符数组 char p1[] 编译器会在末尾自动加上'\0' p1 = &p1[0] cout << p1 直接输出这个字符串,本质就是经过这个地址数组

char *p 定义一个指针变量p,其指向char类型的地址(变量保存的地址所在内存单元中的数据类型为char),不管指向的是哪一种类型,指针自己的类型都是整型,由于保存的是地址spa

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 }

输出:.net

 

 从输出能够看出,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所指向的地址code

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指向同一个地址htm

即p2自己是变量,但指向的区域是常量blog

 

本质区别

当定义 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. http://www.javashuo.com/article/p-hpamsqxx-ms.html
  3. https://blog.csdn.net/u014038273/article/details/77649525
相关文章
相关标签/搜索