我正在研究使用 void 指针接受任意数据类型参数的函数。这样的功能如下:
void funct(void *a) {
float *p = a;
printf("number = %f\n",*p);
}
这是对 的成功调用funct
:
float x = 1.0f;
funct(&x);
x
被声明为浮点数,然后将其指针(即&x
类型float*
为 )传递给funct
; 很简单!
然而,还有另一种方法可以在 C 中声明一个变量并获取它的指针。这是:
float *p;
*p = 1.0f;
但随后调用funct(&x);
返回一个Segmentation fault: 11
!这怎么可能?
此外,假设我想创建一个接受“数字”(即浮点数、整数、双精度、浮点数或其他任何值(例如,甚至 u_short))并在其上加 1 的方法。最通用的实现可能是什么?我应该考虑以下原型:
void add_one(void* x);
?