过久没写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 }
参考资料: