天天看点

java 函数参数类型转换_类型转换函数参数

我一直在玩C中的类型转换 . 特别是,我一直(跟随K&R)尝试实现一个程序,它将采用“一般”类型的输入(具体来说,K&R实现了一个qsort,对一组指针进行排序)通用数据) . 这样做,我遇到了以下问题:

#include

int comp(int *a, int *b); //*a == *b

main()

{

int a = 2;

int b = 3;

int *pa = &a;

int *pb = &b;

int (*pfunc)(void *, void *) = (int (*)(void *, void *)) comp;

int fin = (*pfunc)((void *)pa, (void *)pb);

printf("%d \n", fin);

}

这符合正常,并做你可能期望它做的事情 . 问题是这个:

#include

main()

{

int a = 2;

int b = 3;

int *pa = &a;

int *pb = &b;

void *pVoid_a = (void *) pa;

void *pVoid_b = (void *) pb;

int fin_Void = (*pVoid_a == *pVoid_b);

}

不起作用 .

为什么这是一个问题:据我所知,在类型转换中

int (*pfunc)(void *, void *) = (int (*)(void *, void *)) comp;

指针“comp”的副本,除了该副本指向的函数接受参数“void *”而不是“int *”,并被赋值给变量“pfunc” . 否则,pfunc和comp的行为方式相同 . (我想我在这里肯定是错的,但我不确定为什么)

当在第一个程序中,(void *)pa和(void *)pb被传递给pfunc时,我希望可以制作两个pa和pb的副本,除了这些副本现在是类型(void *)和分配给不同的名字 . 这些副本通过pcomp发送,返回的值打印等 .

我试图在第二个程序中重新创建这个过程,除了它不起作用!出于某种原因,在pVoid_a和pVoid_b传递给pfunc之后的第一个程序中,它们最终在函数体中表现得像“int *”,即使看起来它们没有任何理由 . 为什么pVoid_a和pVoid_b在第一个程序中恢复它们的“int”行为,而不是在第二个程序中?