指向结构的指针的格式说明符
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
.
时,您的 V
有 int
类型
更新
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.
#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
.
V
有 int
类型
更新
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.