我有这个程序,我想了解以下输出:
#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**,不是吗?
&num1是char**不是吗?
是的char (*)[11].你铸造的事实char **破坏了编译器的警告.
你正在做的是完全未定义的行为.你不能在num1其他地方指出,因为它不指向任何地方开始:它是一个数组,而不是一个指针.
正如Paul R指出的那样,这可能是正在发生的事情.sizeof(char *)每个字符串的第一个字符被解释为指针,然后交换它们.发生的事情主要取决于实现中指针的大小.这很有意思,但是我很确定它仍然是未定义的.