这里用空指针进行传参,避免了因为类型不匹配造成的waring。
以下是我写的代码
#include <stdio.h>
void Traverse(void*p,int n,void(*visit)(void *ep));
void zhengshu(int* p);
void fudianshu(double* p);
void zifuchuan(char* p);
int main()
{
int a[]={1,2,3,4,5,6,7,8,9};
double b[]={1.,2.,3.,4.,5.,6.,7.,8.,9.};
char s[]="abcdefghi";
Traverse(a,9,zhengshu);
Traverse(b,9,fudianshu);
Traverse(s,9,zifuchuan);
return 0;
}
void Traverse(void*p,int n,void(*visit)(void *ep))
{
int i=0;
for(i=0;i<n;i++)
{
visit(p);
if(*visit==zhengshu)
p=p+4;
else if(*visit==fudianshu)
p=p+8;
else if(*visit==zifuchuan)
p++;
}
printf("\n");
}
void zhengshu(int* p)
{
printf("%d ",*p);
}
void fudianshu(double* p)
{
printf("%lf ",*p);
}
void zifuchuan(char* p)
{
printf("%c ",*p);
}
虽然有waring,但是输出是没有问题的,有人知道如何改进去掉waring,麻烦评论