首页 > 编程知识 正文

void类型的函数指针(c语言中void类型的指针,C程序中void指针的概念)

时间:2023-05-06 20:56:13 阅读:123236 作者:1276

呼唤远方

到目前为止,我把void指针的轻薄写如下。 使用关键字void声明指针变量是通用指针变量。 可以将数据类型(char、int、float等)的任何变量的地址分配给void指针变量。 main () { int *p; void *vp; vp=p; }因为可以将其他数据类型的指针分配给void指针,所以在absolut_value (以下代码)函数中使用了它。 为了提供常规功能,我们尝试使用整数或浮点数作为参数编写简单的c代码,如果为负,则为ve。 我写了下面的代码。 # includevoidabsolute _ value (void * j )//works if used float,obviouslyitmustworkbutthatsnotmyinteresthere.{ interest hered float f=-40; printf(printintigerI=%dn ',I ); printf(printfloatf=%fn ',f ); absolute_value(I; absolute_value(f; printf(printintigerI=%dn ',I ); printf(printfloatf=%fn ',f ); 返回0; }但是我遇到了错误,所以我知道我对void指针的理解是不正确的: (。 于是,我现在着手收集点,看看为什么会这样。 我想知道更多关于void指针的事情。 要取消引用,必须强制转换void指针变量。 这是因为没有与空指针相关联的数据类型。 编译器不知道(还是推测? ) void指针指向的数据类型。 因此,为了取得void指针指向的数据,使用保存在void指针位置的正确类型的数据进行类型变换。 void main () { int a=10; 浮动b=35.75; void *ptr; //Declaring a void pointer ptr=a; //assigningaddressofintegertovoidpointer.printf (' thevalueofintegervariableis=% d ',* ) (((int* ) ptr ) ) ); //(int* ) ptr-isusedfortypecasting.whereas * (int * ) ptr ) dereferencesthetypecastedvoidpointervariable.ptr=b/assigningaddressoffloattovoidpointer.printf (' thevalueoffloatvariableis=% f ',* ) ) (float* ) ptr ) ); }当程序员不知道最终用户输入的数据的数据类型时,空指针非常有用。 在这种情况下,程序员可以使用void指针指向未知数据类型的位置。 可以将程序设定为请求用户通知数据类型,也可以基于用户输入的信息执行类型转换。 接下来是代码段。 voidfunct(void*a,int z ) if ) z==1) printf ) ' %d ',*(int* ) a ); //If user inputs 1,thenhemeansthedataisanintegerandtypecastingisdoneaccordingly.else if (z==2) printf(%c )、* ) (con //typecastingforcharacterpointer.else if (z==3) printf ) ' %f ',* ) *(float* ) a ); //typecastingforfloatpointer }关于空指针,需要记住的另一个重点是,不能在空指针上执行指针运算。 void *ptr; int a; ptr=a; ptr; //thisstatementisinvalidandwillresultinanerrorbecause ' ptr ' isavoidpointervariable .所以现在我明白了我的错误。 正在修改。 参考文献: http://www.anto arts.com/void-pointers-in-c/http://www.circuits today.com/void-pointers-in-c。 新代码如下: # include # define int1# define float2void absolute _ value (void * j,int *n ) (n==int ) () () ) ) ) }}int main () intI=0,n=0; 浮动f=0; printf (press1toenterintegeror2gotfloatthenenterthevaluetogetabsolutevalue (n ) ); scanf('%d ',n ); printf((n ); if(n==1) scanf ) ' %d ',I ); printf (valuenteredbeforeabsolutefunctionexec=% dn ',I ); absolute_value(I,n ); printf (valuenteredafterabsolutefunctionexec=% dn ',I ); (if ) n==2) scanf )、f ); printf (valuenteredbeforeabsolutefunctionexec=% fn ',f ); absolute_value(f,n ); printf (valuenteredafterabsolutefunctionexec=% fn ',f ); } else printf (unknownentrytryagain (n ); 返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。