切换字符串c语言

Itz*_*984 0 c string char

我有这个程序,我想了解以下输出:

#include <stdio.h> 
void fastSwap (char **i, char **d) 
{ 
  char *t = *d; 
  *d = *i; 
  *i = t; 
} 
int main () 
{ 
 char num1[] = "hellohello"; 
 char num2[] = "classclass"; 
 fastSwap ((char**)&num1,(char**)&num2); 
 printf ("%s\n",num1); 
 printf ("%s\n",num2); 
 return 0; 
} 
Run Code Online (Sandbox Code Playgroud)

输出将仅更改sizeof(void*)字符,而不是整个数组.

为什么会这样?

&num1是的char**,不是吗?

cni*_*tar 5

&num1是char**不是吗?

是的char (*)[11].你铸造的事实char **破坏了编译器的警告.

你正在做的是完全未定义的行为.你不能在num1其他地方指出,因为它不指向任何地方开始:它是一个数组,而不是一个指针.

编辑

正如Paul R指出的那样,这可能是正在发生的事情.sizeof(char *)每个字符串的第一个字符被解释为指针,然后交换它们.发生的事情主要取决于实现中指针的大小.这很有意思,但是我很确定它仍然是未定义的.