指向结构的指针的格式说明符

Format specifier for a pointer to a structure

#include<stdio.h>
#include<stdlib.h>

struct Graph
{
     int v;
};

int main()
{
    struct Graph* graph = (struct Graph*) malloc(sizeof(struct Graph));
    graph -> v = 1;
    printf("%u", graph);
    return 0;
}

但我收到有关格式的警告:

printf("%u", graph);

警告是:

/home/praveen/Dropbox/algo/c_codes/r_2e/main.c|14|warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘struct Graph *’ [-Wformat=]|

我应该为类型 struct Graph * 使用什么格式说明符?

编译器是正确的,graph 有不同于 unsigned int 的另一种类型,后者将由 %u 打印。您可能需要 graph->V,因为 struct.

没有其他数字成员
printf("%u", graph->V);

另请注意,当您尝试打印 unsigned int.

时,您的 Vint 类型

更新

What format specifier should I use for type struct Graph *?

对于指针,您需要格式说明符 %p 并转换为它接受的类型。

printf("%p", (void*)graph);

参见 online demo

C 标准仅指定预定义类型的格式说明符。扩展宏在那里打印固定宽度的整数,但不存在 whole 用户定义/聚合类型的格式说明符。

您没有数组、结构等的格式说明符。您必须获取单个元素/成员并根据它们的类型打印它们。您需要了解要打印的数据(类型)是什么,并使用适当的格式说明符。

在你的例子中,你可以打印类型为 int 的成员 V。所以你可以做类似

的事情
 printf("%d", graph->V);

或者,如果你想打印由malloc()返回并存储到graph中的指针,你可以做

  printf("%p", (void *)graph);

最后,see this discussion on why not to cast the return value of malloc() and family in C.