c - 如何在函数中打印 void * 以及如何在函数中访问 void * 变量?

标签 c linux pointers compiler-errors void-pointers

我试图将一个函数作为参数传递给另一个带有 void 指针的函数,但它不起作用

#include "header.h"
void print ( void *Arg )
{
//  while ( ( int *) Arg[0] )
    {
        printf ( "Arg[0] = %d Arg[1] = %d\n",(int *)  Arg[0], (int * ) Arg[1] );
        sleep ( 1 );
        //Arg[0]--;
        //Arg[1]--;
    }
}
void main(int argc, char **argv)
{
    int count[2] = { 10, 160};
    print (count);
}

我收到这样的错误:

void*.c: In function ‘print’:
void*.c:6:52: warning: dereferencing ‘void *’ pointer [enabled by default]
   printf ( "Arg[0] = %d Arg[1] = %d\n",(int *)  Arg[0], (int * ) Arg[1] );
                                                    ^
void*.c:6:3: error: invalid use of void expression
   printf ( "Arg[0] = %d Arg[1] = %d\n",(int *)  Arg[0], (int * ) Arg[1] );
   ^
void*.c:6:69: warning: dereferencing ‘void *’ pointer [enabled by default]
   printf ( "Arg[0] = %d Arg[1] = %d\n",(int *)  Arg[0], (int * ) Arg[1] );
                                                                     ^
void*.c:6:3: error: invalid use of void expression
   printf ( "Arg[0] = %d Arg[1] = %d\n",(int *)  Arg[0], (int * ) Arg[1] );

我该如何解决这个问题?

最佳答案

要打印指针,您需要 "%p" printf格式。

但似乎您实际上并不想打印实际指针,而是打印它指向的,这就是您的错误来源,因为您的转换位置错误,您需要在取消引用之前转换指针,例如

((int *) Arg)[0]

operator precedence 有问题其中数组下标运算符的优先级高于类型转换运算符。所以编译器认为你在​​做 (int *) (Arg[0])

关于c - 如何在函数中打印 void * 以及如何在函数中访问 void * 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30890620/

相关文章:

c - C 标准库的更安全替代品

c - int 指针表达式

mysql - 系统健康状况»进程管理器

mysql - 使用shell脚本将日期插入mysql表

c - 为什么 fread_s 在此 C 代码中不起作用?

c++ - 链表的复制构造函数会导致内存错误

c - 有int数据类型的数组函数吗?

找不到在另一个动态库中定义的符号

C++ 添加linux用户

c++ - std::move 是否使指针无效?