【发布时间】:2020-05-26 13:41:54
【问题描述】:
**大家好,我在将我的 void 指针数组转换为指向我的浮点数组时遇到了问题, 我希望我的 void 指针指向浮点数组 所以 void[0]=float[0] 我知道 void ptr 和 float 的大小不同,所以我不能以这种方式分配它 无效[0]=浮动[0] 我该如何解决这个问题? 谢谢!
void *ptr[5];
float arr[5];
for(i=0;i<5;i++)
ptr[i]=arr[i];
我该如何解决这个问题?我想使用 void 指针数组发送任何数组 我已经添加了代码:
#define _CRT_SECURE_NO_WARNINGS
#define N 5
#include <stdio.h>
#include <stdlib.h>
typedef enum {FALSE,TRUE} BOOL;
BOOL Int_Sum(void* a, void* b, void* c)
{
if (*(int*)a + *(int*)b == *(int*)c)
return TRUE;
return FALSE;
};
BOOL Float_sum(void*a, void* b, void* c)
{
if (*(float*)a + *(float*)b == *(float*)c)
return TRUE;
return FALSE;
};
BOOL Sum(BOOL(*F)(void*, void*, void*), void** p_num, void* number)
{
int i = 0,j=0;
for (i = 0; i <N; i++)
{
for (j = 0 ; j <N; j++)
{
if (j != i)
{
if (F(&p_num[i], &p_num[j], number))
return TRUE;
}
}
}
return FALSE;
}
int main()
{
int num[] = { 3,5,23,5,6 }, i=0, value;
float fnum[] = { 3.5,5.0,2.3,5.8,6.2 }, fvalue;
void* p_num[N];
float* f_pnt[N];
BOOL* fpnt;
fpnt=Int_Sum;
for (i = 0; i < N; i++)
p_num[i] = num[i];
printf("\nPlease enter an integer number:");
scanf("%d", &value);
if (Sum(fpnt, p_num,&value )== TRUE)
printf("There is such sum\n");
else
printf("There is no such sum\n");
printf("\nPlease enter an integer number:");
scanf("%f", &fvalue);
fpnt = Float_sum;
for (i = 0; i < N; i++)
{
(float*)p_num[i] =fnum+i;
}
if (Sum(fpnt, p_num, &fvalue))
printf("There is such sum\n");
else printf("There is no such sum\n");
return 0;
}
当我想使用浮点数组时遇到问题
**
【问题讨论】:
-
是什么让你说 void 指针和 float 指针大小不一样?
-
当然
void*和float的大小可能不同,将一个分配给另一个是没有意义的。但这就是你在这里所做的。你打算ptr[i] = &arr[i]吗? -
“发送任何数组”是什么意思?你到底想在这里完成什么?
-
这能回答你的问题吗? void* is literally float, how to cast?
-
好吧,我可以更好地解释自己,我有一个函数,它接收一个 void 指针数组并检查数组中是否有相同的东西。我的主数组中有 2 个数组,其中一个是 int ,另一个是 float 。我需要分配 VOID 指针以指向浮动元素,因此 Void ptr[0]=float arr[0]。我该如何做到这一点?
标签: c