【问题标题】:How can you print an item that is void** data in C?如何在 C 中打印一个 void** 数据的项目?
【发布时间】:2013-06-20 22:05:09
【问题描述】:

在尝试为 C 堆栈构建测试平台时,我遇到了如何正确显示它的问题。我检查了六本书,它们都有一种向/从堆栈推送和弹出的方法,但没有一个例子说明你如何实际使用这些例程。有人可以给我看看这个模式,这样我就可以编写调试 printf 语句了吗?

对 pop 的调用使用这种结构:

{ struct Element *next; void *data; }

弹出功能是:

int pop ( tElement **stack, void **data )

如何打印数据项。

【问题讨论】:

  • 你需要知道物品的类型否则void **对你没用(除非你只想%p并打印出地址)。

标签: c stack printf void-pointers


【解决方案1】:

可以打印出指针值:

void print_data (void **data) {
    printf("%p", data);
    if (data) printf(", *%p", *data);
}

或者,您可以为数据结构的用户提供回调挂钩,为您提供打印功能:

void pretty_print_data (void **data, void (*print_callback)(void **)) {
    printf("%p%s", data, (data ? "" : ": "));
    if (data) printf(", *%p: ", *data);
    if (print_callback) print_callback(data);
}

提供回调的程序员知道data应该是什么类型:

void print_point (void **data) {
    if (data && *data) {
        point *p = *data;
        printf("(%d, %d)", p->x, p->y);
    } else {
        printf("nil");
    }
}

【讨论】:

    猜你喜欢
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    相关资源
    最近更新 更多