【发布时间】:2013-05-15 03:40:07
【问题描述】:
#include <stdio.h>
void swap(void *v[], int i, int j)
{
void *tmp;
tmp = v[i];
v[i] = v[j];
v[j] = tmp;
}
int main(void)
{
char *s[] = {"one", "two"};
printf("%s, %s\n", s[0], s[1]);
swap(s, 0, 1);
printf("%s, %s\n", s[0], s[1]);
return 0;
}
输出:
one, two
two, one
警告: no compatible pointer casting, need void**, but char
我用这个程序模拟了K&R中的swap函数,演示了函数指针的使用,我的问题是void pointer的转换是否总是安全的,或者是否存在有什么办法可以代替它。
【问题讨论】:
-
我使用 gcc std=c99 编译它。
-
真正发生的是,指针就像句柄或地址。你不是在交换数据,而是将地址交换到数据。所以,还是挺安全的。
-
@Aniket:不,这不一定安全。想象一个系统,其中
char*的大小与int*的大小不同。