C char []交换问题

And*_*zej 1 c swap char

我有这个简短的代码:

#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 []的最后一个字母都被交换了.有任何想法吗?

Arm*_*yan 5

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)