c - C中的函数指针问题

标签 c pointers casting

#include <stdlib.h>

int int_sorter( const void *first_arg, const void *second_arg )
{
    int first = *(int*)first_arg;
    int second = *(int*)second_arg;
    if ( first < second )
    {
        return -1;
    }
    else if ( first == second )
    {
        return 0;
    }
    else
    {
        return 1;
    }
}

int main()
{
    int array[10];
    int i;
    /* fill array */
    for ( i = 0; i < 10; ++i )
    {
        array[ i ] = 10 - i;
    }
    qsort( array, 10 , sizeof( int ), int_sorter );
    for ( i = 0; i < 10; ++i )
    {
        printf ( "%d\n" ,array[ i ] );
    }

}

我不明白这一行:

int first = *(int*)first_arg;

谁能帮帮我?解释一下?非常感谢!!!

这是选角吗?显式转换,从 void*int?但是为什么我们需要 () 之外的 & 符号呢?

最佳答案

您首先将 void 指针转换为 int 指针: (int*)first_arg

然后取消引用指针:*(int*)first_arg 以获取它指向的整数。然后将其分配给整数变量。

关于c - C中的函数指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5547023/

相关文章:

c - 如何在 C 中为 scanf 创建可选输入?

c - 在 if 条件中使用 fork

python - 创建共享内存的 pythonic 对象

java - 带有指向结构参数的指针的 JNA 回调函数

c++ - 我可以使用 C 风格的转换将派生类转换为私有(private)基类吗?

c - 简单的C scanf 不起作用?

C++ 从 get 函数中访问和操作二维指针数组

c++ - 删除另一个类的方法中的多个指针

ios - 在 iOS 8.1.1 中 typecast BOOL 总是返回 false

c# - 使用 Convert.ChangeType 在字符串和枚举之间进行转换