表达式*(int*)a是什么意思?
What does expression *(int*)a mean?
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
我不理解表达*(int*)a
?
一个void *
指针是一个通用的指针,它可以指向任何东西,但由于编译器不知道确切的什么它指向你必须告诉编译器它到底指向什么。这种"告诉"就是强制转换所做的:(int *) a
告诉编译器a
实际上指向int
。
然后代码只是使用解引用运算符(一元*
)来获取a
所指向的位置的值,并在正常的减法表达式中使用该值。
(int*)a
将a
转换为int*
。简单地解引用a
是行不通的,因为*a
的类型是void
,这是不允许的。
此外,这在这里有点不安全,因为a
作为const
传递,而调用者希望*a
不被更改。好吧,a
确实没有改变,但这样显式的转换应该是罕见的。
额外的解引用"获取"a
指向的值。最后,如果两个数据相等,compare
返回0
。
(int*)a
将void指针转换为int类型指针。*(int*)a
取指针指向的值
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思