太久没写c/c++代码了,写了剑指offer的一道题,就把自己整懵了,真的不好意思说自己学过算法,打过一点比赛
主要还是对指针的概念模糊
写一下关于 char * char[] string 的区别及转换
字符数组 char p1[] 编译器会在末尾自动加上' ' 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
原文链接: https://www.cnblogs.com/LIN-JW/p/12634538.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/195338
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!