写一个通用显示函数

做自己 不忘初心 2019-10-10 09:33:45
1. (本题3分) 写一个通用显示函数,调用此函数显示任意数组元素。 要求能打印任意数组的元素 这怎么写呀,真想不出来了,第一步调用函数传参就写不下去了。
...全文
162 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2019-10-10
  • 打赏
  • 举报
回复
引用 1 楼 qq_33437675 的回复:
现在只是想到了字符数组和整形数组,后面还有浮点型数组,感觉好难呀

那就用函数指针。

#include <stdio.h>

typedef void show_arr(void *arr, int len);

void visit(void *arr, int len, show_arr pfunc)
{
pfunc(arr, len);
}


void show_int(void *arr, int len)
{
int i;

int *array = (int *)arr;

for (i = 0; i < len; i++)
printf("%d ", array[i]);
putchar(10);
}

void show_char(void *arr, int len)
{
int i;
char *array = (char *)arr;

for (i = 0; i < len; i++)
printf("%c ", array[i]);
putchar(10);
}

void show_float(void *arr, int len)
{
int i;
float *array = (float *)arr;

for (i = 0; i < len; i++)
printf("%f ", array[i]);
putchar(10);
}

void show_double(double *arr, int len)
{
int i;
double *array = (double *)arr;

for (i = 0; i < len; i++)
printf("%lf ", array[i]);
putchar(10);
}

void show_string(void *arr, int len)
{
int i;
char **str = (char **)arr;

for (i = 0; i < len; i++)
printf("%s ", str[i]);
putchar(10);
}

int main(void)
{
int arr[8] = { 1, 2, 3, 5 };
char *str[3] = {"hello", "world"};

visit(arr, 8, show_int);
visit(str, 3, show_string);

return 0;
}

通用函数visit;
  • 打赏
  • 举报
回复
现在只是想到了字符数组和整形数组,后面还有浮点型数组,感觉好难呀
赵4老师 2019-10-10
  • 打赏
  • 举报
回复
模板
qybao 2019-10-10
  • 打赏
  • 举报
回复
C++的话可以用模版(这个估计才是完美的解决方案)
纯C的话,如2L所说用函数指针,或者也可以考虑用一个变量来判断类型(这些方法都有缺陷,不能覆盖所以类型)
viod printAny(void* a, int len, int kind) {
switch (kind) {
case 0: //char*
char *c = (char*)a;
for (int i=0; i<len; i++) {
print("%c ", c[i]);
}
break;
case 1: //int*
//依此类推
case 2: //long*
...
default:
}
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧