我有这个简短的代码:
#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;
}
这个简短程序的输出是:
claso
hells
我只是不明白为什么交换每个char []的最后一个字母。 有什么想法吗?
答案 0 :(得分:5)
fastSwap ((char**)&num1,(char**)&num2);
这是未定义的行为。您不能将指向char数组的指针强制转换为指向char的指针。你需要的是:
const char* num1 = "hello";
const char* num2 = "class";
fastSwap (&num1,&num2);
此外,您需要更改fastSwap
的声明并将内层const
添加到参数
void fastSwap (const char **i, const char **d)
答案 1 :(得分:2)
我假设您只是通过操作指针来尝试交换num1
和num2
数组的内容,以便在调用fastswap
之后num1
的内容为"class"
,num2
的内容为"hello"
。
如果是这种情况,那么由于多种原因这不起作用。尽管数组表达式经常转换为指针类型,但数组不是指针。其次,您无法修改数组表达式的值。
如果你想将num1
和num2
作为数组(而不是指向字符串文字的指针)并且能够交换它们的内容,你需要更多的东西:< / p>
void fastswap(char *i, char *d)
{
while (*i && *d)
{
char t = *i;
*d++ = *i;
*i++ = t;
}
}
将被称为
fastswap(num1, num2);
答案 2 :(得分:0)
您正在指向指向字符的指针。您可能只想将指针传递给这样的字符:
#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 (num1,num2);
printf ("%s\n",num1);
printf ("%s\n",num2);
return 0;
}
这会交换2个char数组的第一个字符。