我有这个简短的代码:
#include <stdio.h>
void fastSwap (char **i, char **d)
{
char *t = *d;
*d = *i;
*i = t;
}
int main ()
{
char num1[] = "hello";
char num2[] = "class";
fastSwap ((char**)&num1,(char**)&num2);
printf ("%s\n",num1);
printf ("%s\n",num2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这个简短程序的输出是:
claso
hells
Run Code Online (Sandbox Code Playgroud)
我只是不明白为什么每个char []的最后一个字母都被交换了.有任何想法吗?
fastSwap ((char**)&num1,(char**)&num2);
Run Code Online (Sandbox Code Playgroud)
这是未定义的行为.您不能将指向char数组的指针强制转换为指向char的指针.你需要的是:
const char* num1 = "hello";
const char* num2 = "class";
fastSwap (&num1,&num2);
Run Code Online (Sandbox Code Playgroud)
此外,您还需要更改声明fastSwap并将内部级别添加const到参数中
void fastSwap (const char **i, const char **d)
Run Code Online (Sandbox Code Playgroud)