c - 在 c printf 中无效使用 void 表达式
问题描述
我正在学习 c. 我有这个结构:
typedef struct mystuff
{
char* name;
int val;
}MyStuff;
我主要打电话给:
MyStuff fruit1 ={"watermellon", 1};
我将数据传递给 insertLifo:
insertLifo(myQueue, &fruit1);
这是功能
bool insertLifo(LifoQueue queue, void* data)
在函数内部,我想打印数据以进行调试:
printf("insertLifo() %s \n", *data);
我收到以下错误:
MemAlloc.c: In function ‘insertLifo’:
MemAlloc.c:42:32: warning: dereferencing ‘void *’ pointer [enabled by default]
printf("insertLifo() %s \n", *data);
^
MemAlloc.c:42:2: error: invalid use of void expression
printf("insertLifo() %s \n", *data);
^
我努力了:
printf("insertLifo() %p \n", (void*)*data);
和其他方式。
我想完全了解如何使用指针
解决方案
您的错误在于您声明的方式insertLifo()
,因为您错误地声明了第二个参数。它应该是:
bool insertLifo(LifoQueue queue, MyStuff* data)
所以你可以通过引用传递变量。然后,你必须这样做:
printf("bla bla %s", data->name);
因为%s
格式说明符需要按原样传递 type 的char *
参数name
。
但是,正如我在对您的问题的评论中告诉您的那样,我们需要一个完整且可验证的示例才能进行诊断。你没有这样做,所以你得到的回复不完整。请阅读如何创建最小、完整和可验证的示例
另一个错误是您可能还需要insertLifo()
通过引用传递第一个参数,因为您可能需要修改该结构,如果您按值传递它,它将被复制到函数中,并且您所做的任何修改它将在函数返回时丢失。
最后你说
我想完全了解如何使用指针。
嗯,这完全超出了这个应用程序的范围。StackOverflow 只是帮助你纠正代码中的一个小问题,而不是教你如何编程。我可以说,许多人终其一生都在试图理解如何使用指针,但从未成功。这取决于很多方面,但你可以做的一件好事是买一本关于 C 的好书。
推荐阅读
- php - 如何从 laravel 中的数据透视表中制作可靠的下拉菜单
- r - 在 dplyr 1.0 中重命名 tidyeval 中的列
- c# - Wpf .Net.5 应用程序中的 Prism 和 Uno 平台。使用什么 Nuget 包?
- java - 如何将存储在字符串数组中的特定字符串打印到字符串数组的 ArrayList 中?
- php - Symfony 中的路径类型:何时使用“AppBundle:SomeEntity”或“AppBundle/Entity/SomeEntity”?
- eclipse - 如何诱使 Eclipse 显示缺少的 @Nullable/@NonNull “注释”命令?
- chronicle - 如何将 SelfDescribeingMarshallables 列表序列化为 CSV
- vb.net - 运行带有参数的 .exe,但还要检查它是否存在于 Visual Basic 上
- laravel - 与laravel中的一个json列属于关系
- javascript - 如何在nodejs中分割数组对象?