int num = *(int *)number;这是做啥的?

Posted

技术标签:

【中文标题】int num = *(int *)number;这是做啥的?【英文标题】:int num = *(int *)number; What does this do?int num = *(int *)number;这是做什么的? 【发布时间】:2010-11-13 00:45:12 【问题描述】:

我在看一些 c++ 代码,我看到了这个:

int num = *(int *)number;

我以前从未见过这个? 它在一个这样标记的函数中:

void *customer(void *number) 

那还能做什么?有什么不同的方式来展示这个吗?

谢谢,这不是作业顺便说一句,我只是对它的作用感到困惑?

【问题讨论】:

【参考方案1】:

(int *) 部分将变量 number 转换为指向 int 的指针,然后前面的 * 将其取消引用为 int。

【讨论】:

+1 @Charles 是的,基本上 num 现在将保存该数字指向的值的副本。 值得补充的是:在转换 FROM void 指针时,我们需要使用转换运算符。这就是使用 (int *) 将 'number' 转换为 void 指针的原因到一个 int。并且 * 进一步将此指针指向一个 int 以返回一个 int。【参考方案2】:

该函数采用void*,但不知何故,它知道(可能在某些文档中需要它)它给出的指针实际上指向int

所以,(int*)number 是“原始指针,转换为 int*,以便我可以从中读取 int”,*(int*)number 是它指向的 int 值。

【讨论】:

【参考方案3】:

正确答案已经在这里了,但我能告诉你一个在我不得不大量使用 C 时通常对我有帮助的技巧吗?

这就是你在脑海中发音“*”的方式 - 有两个部分。

常见的部分是当它是类型的一部分时——每个人读到它时可能都会说“指针”,这很好。所以 (int *) 是一个 int 指针——或者我什至会在脑海中反转它来阅读“指向 int 的指针”,这似乎有点帮助。

对我有很大帮助的是,每当您在代码中看到 * 时——将其读作“所指向的内容”。

如果你遵循这个模式,那么:

int num = *(int *)number;

是一个整数变量“num”被赋值:int 指针所指向的数字,数字。它只是自己翻译。

有时你不得不稍微弄乱一下措辞,但自从我养成了这个习惯后,我在阅读指针代码时就再也没有遇到过大问题了。

我相信我也将 & 读作 C 中的“地址”,但如果我没记错的话,我认为它在 C++ 中被重载了。

【讨论】:

【参考方案4】:

我假设customer 是这样使用的:

int lookup = 123;
customer_key *key = customer(&lookup);
// do something with key here

在这种情况下,customer 中的代码将void * 类型转换为int *,然后取消引用它(获取它的值)。它必须首先进行类型转换,因为void * 基本上意味着“指向某物的指针”,它允许您传入任何您想要的类型。如果没有类型转换,编译器不知道您是要读取char(通常为1 字节)、short(通常为2 字节)还是int(通常为4 字节)。类型转换消除了歧义。

注意使用void * 作为参数可能不是最好的,因为你可以这样做:

double lookup = 69.0f;
customer_key *key = customer(&lookup);

这将编译,但不会查找客户 69(double 不是 int!)。

void * 的使用可能是有意的,代码可能能够(希望安全地)确定指针和参数之间的关系,例如:(void *)3 - 这将是一种特殊情况。

【讨论】:

【参考方案5】:

该函数接受一个 void 指针(因此是 void *)。为了将其取消引用到某种类型的变量(例如 int)——这是第一个“*”所做的——你需要将它转换为指向实际类型的指针——在这种情况下通过 (int *) 演员表

【讨论】:

【参考方案6】:
int num = *(int *)number;

通常,这里的“数字”应该是某种类型的指针,通常是void* 指针。

(int *)number,表示将原始类型转换为int**(int *)number,表示获得int指针的值。

【讨论】:

以上是关于int num = *(int *)number;这是做啥的?的主要内容,如果未能解决你的问题,请参考以下文章

number类型怎么转换string类型

673. Number of Longest Increasing Subsequence

C++怎么把int转换成char

这句话是啥意思?(c#) int

414. Third Maximum Number

136. Single Number