【发布时间】:2015-03-23 21:37:33
【问题描述】:
我制作了一个基本函数,它使用 void 指针,然后根据其类型处理输入。
#include <stdio.h>
int writeVal (int id, void *ptr, int byteSize)
{
printf ("size is %d" , byteSize);
if (byteSize == sizeof(int))
{
printf("int %d", *(int*)ptr);
}
if (byteSize == sizeof(float))
{
printf("float %f", *(float*)ptr);
}
if (byteSize == sizeof(double))
{
printf("double %lf", *(double*)ptr);
}
if (byteSize == sizeof(long double))
{
printf("long double %lf", *(long double*)ptr);
}
else
{
printf ("Unknown Type");
return 1;
}
return 0;
}
int main(void) {
// your code goes here
long double i=30.0;
long double *ff=&i;
int ret=writeVal(10, ff,sizeof(*ff));
return 0;
}
这对所有值都适用,除非我传递一个 long double,在这种情况下它会给出一个垃圾值。为什么会这样?
其次,这是处理保存类型可以是任何数据的指针的最佳方法吗?
【问题讨论】:
-
垃圾前是否打印“long double”?
-
是的,它确实打印了 long double。
-
@Isaiah 那你推荐什么方法,有一个可以传递任何数据类型的函数,并且它必须能够打印它并执行其他操作?
-
我只是注意到标准对指针转换几乎没有保证,但给出的答案似乎是你的问题。
标签: c pointers void-pointers