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

13 c c++ pointers

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

int num = *(int *)number;
Run Code Online (Sandbox Code Playgroud)

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

void *customer(void *number){ }
Run Code Online (Sandbox Code Playgroud)

这甚至做了什么?是否有不同的方式来展示这个?

谢谢,这不是家庭作业btw我只是困惑这是什么?

Cha*_* Ma 13

(int*)部分将变量数转换为指向int的指针,然后前面的*将其解引用为int.


Ste*_*sop 12

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

所以,(int*)number是"原始指针,转换为一个int*以便我可以从中读取int它",并且*(int*)number是它指向的int值.


Bil*_*l K 5

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

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

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

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

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

int num = *(int *)number;
Run Code Online (Sandbox Code Playgroud)

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

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

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