c - 如何在 C 中编写一个通用显示函数来显示所有数据类型的 void 指针?
问题描述
我一直在使用 void 指针来实现使用数组的堆栈。我知道,在显示 void 指针指向的值之前,我们需要将其转换为合适的数据类型。
这是我的堆栈结构
typedef struct {
void **arr; // array stack
int size; // size of the stack
int top; // top most element of the stack
int count; // number of elements in the stack
} stack_T;
假设我现在有一个 int 堆栈(堆栈的内容 -> arr 是数据类型 int )。要显示它的内容,我可以简单地编写一个 display()
void displayIntStack( stack_T *stack ) {
while ( !isEmpty( stack )) {
printf( "%d ", *( int * )stack -> arr[ stack -> top] );
pop( stack );
}
}
我可以使用它来调用它displayIntStack( stack );
,它会显示 int 堆栈的内容。
如果我想实现更通用的 display() 函数来显示所有数据类型的堆栈内容,而无需编写单独的函数。我该怎么做?
解决方案
如果我想实现更通用的 display() 函数来显示所有数据类型的堆栈内容,而无需编写单独的函数。我该怎么做?
添加一个成员stack_T
是执行打印的函数指针。.print()
在定义堆栈实例时设置该成员。
typedef struct {
void **arr;
int size;
int top;
int count;
int (*print)(void *);
} stack_T;
while (!isEmpty(stack)) {
stack->print(stack->arr[stack->top]);
pop(stack);
}
您可以为通常的嫌疑人提供一组预定义的.print()
函数。这种方法允许用户为任何类型创建自定义打印功能。int, double
我还希望有一种方法可以在不更改堆栈的情况下将其应用于。.print()
stack
进一步:我认为最好的方法是为您的类型形成一个应用函数stack
并否定对.print()
函数成员的需求:
伪代码
int stack_apply(const stack_T *st, int (*f)(void *state, void *data), void *state) {
for each node i in the stack
int result = f(state, stack->arr[i]);
if (result) return result;
}
return 0;
}
现在,当您要打印时:
stack_apply(st, my_print_function, my_print_state);
或者可能是一个搜索函数,或者一个最大值函数,或者一个标准差函数......
推荐阅读
- javascript - 遍历对象数组以获取值
- css - 如何使用 CSS 渐变生成图像/SVG 文件
- r - 在条形图中使用新调色板时删除 R 中的原始颜色轮廓
- javascript - NestJS 在用玩笑测试方法之前访问私有类字段
- spring-boot - 没有时间的日期字段的Spring Boot查询
- java - 有没有办法使用 ADB 命令而不是设备策略管理器将应用程序列入锁定任务模式的白名单?
- python - 如何将数据发送到服务器进行预测 - MLflow
- expression - OWL-S 前置条件表达式提取
- powershell - 解决 powershell 中的“CommandNotFoundException”错误,脚本从该位置删除?
- javascript - 在.then 中的 setState 之后,组件在 Axios 调用之后不重新渲染