Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将void*转换为float**在c中,将void指针转换为float指针指针_C++_Objective C_C_Pointers_Floating Point - Fatal编程技术网

C++ 如何将void*转换为float**在c中,将void指针转换为float指针指针

C++ 如何将void*转换为float**在c中,将void指针转换为float指针指针,c++,objective-c,c,pointers,floating-point,C++,Objective C,C,Pointers,Floating Point,我有一个函数,它将float**作为输入变量,Jim。我还有另一个变量,它是从类型为void*的函数返回的。如何将void*转换为float**?它们都应该是指向浮点数组的指针,但是为什么float**是指向指针的指针呢?这是正确的吗 void* Joe; float** Jim = *(float*) Joe; 从我的研究来看,铸造到浮动有一些限制。可以将Likevoid*强制转换为float。我是否需要像这样提取Joe的地址: float** Jim = *(float*) &Jo

我有一个函数,它将
float**
作为输入变量,
Jim
。我还有另一个变量,它是从类型为
void*
的函数返回的。如何将
void*
转换为
float**
?它们都应该是指向浮点数组的指针,但是为什么
float**
是指向指针的指针呢?这是正确的吗

void* Joe;
float** Jim = *(float*) Joe;
从我的研究来看,铸造到浮动有一些限制。可以将Like
void*
强制转换为
float
。我是否需要像这样提取Joe的地址:

float** Jim = *(float*) &Joe;

Joe不是已经是地址了吗,因为它是指针了吗?

强制转换的类型应该与左边的变量相同,所以

float **Jim = (float**)&Joe;

如果不知道你想要达到什么目标,就不可能给出合理的答案

void* Joe;
意思是乔是指向某个东西的指针。我们只是不知道它指的是什么

float** Jim;
意思是吉姆是一个指针。我们知道它应该指向什么样的东西:它应该指向float*,也就是指向另一个指针,指向一个float

现在您可以分配:

Jim = (float **)Joe;
现在发生的事情是吉姆指着乔指的东西。我们不知道乔指的是什么,但吉姆指的是同一件事。如果Joe指向一个int,那么Jim指向同一个int,但编译器认为Jim指向一个float*。由于int和float*是非常不同的东西,使用*Jim将导致灾难

如果乔碰巧指向一个浮点数*,那么吉姆现在将指向完全相同的浮点数*,一切都很好。如果Joe碰巧指向一个float(记住float和float*不一样)或double*(记住double*和float*不一样),事情就会出错

重复:作业Jim=(float**)Joe;不会改变乔指的东西。它改变了编译器认为Jim指向的内容。如果编译器认为Jim指向的内容与Jim实际指向的内容不一样,那么事情就会出错

你的线路

float** Jim = *(float*) &Joe;

这是完全错误的。乔是一个指向某物的人。我们不知道是什么&Joe是该指针的地址,所以它是指向Joe的指针,这是一个指向我们不知道的东西的指针(void**)。您将该指针强制转换为float*,这将给出一个指向Joe的指针,但编译器认为变量Joe包含一个float而不是一个void*(浮动*)和乔;读取存储在变量Joe中的void*,但编译器认为它不是void*,而是float。那肯定是错的。然后要求编译器将该浮点值分配给编译器不允许的浮点**,因为浮点和浮点**是完全不同的东西

float*
是指针,但指针存储在哪里?它的地址是什么?这就是
float**
的定义,正如您所假设的,它是指向内存中存放浮点指针的位置的指针胡说八道?你是否不明白void*是指向任何事物的常用方式?不是指向空洞对象的指针。请避免在C++中使用<代码>空白>代码>。这是一个丑陋且不安全的C hack。哈哈哈,好吧,当我处理使用
void*
的C lib时,我应该马上崩溃并哭出来。谢谢你的详细解释。您当然可以分配
Jim=(float**)Joe