使用空指针发送浮点数组时出现问题

  • 本文关键字:数组 问题 空指针 c
  • 更新时间 :
  • 英文 :


**嘿伙计们,我在投射我的空指针数组以指向我的浮点数组时遇到了问题, 我希望我的 void 指针指向浮点数组 所以空[0]=浮点[0] 我知道空 PTR 和浮点数的大小不同,所以我不能以这种方式分配它 空[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 sumn");
else
printf("There is no such sumn");
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 sumn");
else printf("There is no such sumn");

return 0;
}

当我想使用浮点数组时遇到功能问题

**

如何解决此问题?

节省时间。 启用所有编译器警告。 这就是我在这里发现大多数代码问题的方式。


至少这些问题:

函数指针的类型声明错误

对象指针BOOL *fpnt不足以存储函数指针。 使用函数指针。

//BOOL *fpnt;
BOOL (*fpnt)(void*, void*, void*);

F()中的参数类型错误

// if (F(&p_num[i], &p_num[j], number))
if (F(p_num[i], p_num[j], number))

选角暗示有问题

强制转换会导致代码无法编译。 不需要演员表。

// (float*)p_num[i] =fnum+i;
p_num[i] = fnum+i;

为指针指定int

相反,分配int的地址。

for (i = 0; i < N; i++)
// p_num[i] = num[i];
p_num[i] = &num[i];

我知道voidPTR 和float的大小不同,所以我不能以这种方式分配它void[0]=float[0]

float分配给指针毫无意义。

void *分配float *float *void *的大小和编码可能不同,但这不是这里的关键问题


请注意,像2.3,5.8,6.2这样的值的编码方式与float完全相同。 而是使用附近的值。 代码的行为可能不符合预期。

在下面添加以查看原因。

BOOL Float_sum(void *a, void *b, void *c) {
printf("%.20f %.20f %.20f  %.20fn", 
*(float*) a, *(float*) b, *(float*) c, *(float*) a + *(float*) b);
...

最新更新