越是基础的东西,越容易犯错.
首先看下第一版程序的代码:
#includeusing namespace std;bool string_reverse(char* p, int length);int main(){ char* test = "1234567"; cout << test << endl; string_reverse(test, strlen(test)); cout << test << endl; return 0;}bool string_reverse(char* p, int length){ int len = strlen(p); if (len > length) { len = length; } char* q = p + strlen(p) - 1; while (q > p) { char temp; temp = *p; *p = *q; *q = temp; -- q; ++ p; } return true;}
编译没问题,运行出错,内存不能访问.这是什么原因呢.
我又重新看了一遍程序,发现有个地方好像不对:
char* test = "1234567";//这个地方,为什么我用的是字符常量呢?
改成字符数组试试
char test[] = "1234567";
编译运行,正确执行.好了现在说明下char * test和char test[]
char message1[] = "Hello";char* message2 = "Hello";
看上去两者很像但是有不同的含义:
前者是一个字符串数组,后面是一个真正的字符串常量.这个指针变量被初始化为指向这个字符串常量的存储位置.
然而字符串常量是不可以改变的,因此那样当参数传递进去之后会出现错误.