先看以前写的一段程序:
其主要功能是实现字符串的原地转换:
char* Revert(char *source)
{
int length = strlen(source);
int start = 0;
int end = length - 1;
while(start < end)
{
char temp ;
temp = *(source + start);
*(source + start) = *(source + end);
*(source + end) = temp;
start++;
end --;
}
return source;
}
int _tmain(int argc, _TCHAR* argv[])
{
char * source = "Hello,world";
char *result = Revert(source);
}
开始不知道拿错了,后来发现可能是函数中对指针操作有误:
C++/C 程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的。 数组要么在静态存储区被创建 (如全局数组) , 要么在栈上被创建。 数组名对应着 (而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。 指针可以随时指向任意类型的内存块,它的特征是“可变” ,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。
这里摘录《高质量C++/C编程》说明: