我是靠谱客的博主 乐观盼望,最近开发中收集的这篇文章主要介绍c语言中void类型的指针,C程序中void指针的概念,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

ae5738ef7eb3eb510f620ac5627689b8.png

呼唤远方

到目前为止,我对void指针的轻描淡写如下。当使用关键字void声明指针变量时,它将成为通用指针变量。任何数据类型(char,int,float等)的任何变量的地址都可以分配给void指针变量。main(){    int *p;    void *vp;    vp=p;} 由于可以将其他数据类型的指针分配给void指针,因此我在absolut_value(下面显示的代码)函数中使用了它。使具有一般功能我试图编写一个简单的C代码,将整数或浮点数作为参数,并尝试使其为+ ve(如果为负)。我写了下面的代码,#includevoid absolute_value ( void *j) // works if used float, obviously it must work but thats not my interest here.{    if ( *j < 0 )        *j = *j * (-1);}int main(){    int i = 40;    float f = -40;    printf("print intiger i = %d n",i);    printf("print float f = %f n",f);    absolute_value(&i);    absolute_value(&f);    printf("print intiger i = %d n",i);    printf("print float f = %f n",f);    return 0;}   但是我遇到了错误,所以我知道我对void指针的理解是不正确的:(。因此,我现在将着手收集点,为什么会这样。我需要了解更多关于void指针的内容。我们需要强制转换void指针变量以取消引用。这是因为空指针没有与之关联的数据类型。编译器无法知道(或猜测?)void指针指向的数据类型。因此,要获取由void指针指向的数据,我们使用在void指针位置内保存的正确类型的数据进行类型转换。void main(){    int a=10;    float b=35.75;    void *ptr; // Declaring a void pointer    ptr=&a; // Assigning address of integer to void pointer.    printf("The value of integer variable is= %d",*( (int*) ptr) );// (int*)ptr - is used for type casting. Where as *((int*)ptr) dereferences the typecasted void pointer variable.    ptr=&b; // Assigning address of float to void pointer.    printf("The value of float variable is= %f",*( (float*) ptr) );}如果程序员不确定最终用户输入的数据的数据类型,则空指针非常有用。在这种情况下,程序员可以使用void指针指向未知数据类型的位置。可以以要求用户通知数据类型的方式来设置程序,并且可以根据用户输入的信息来执行类型转换。下面是一个代码段。void funct(void *a, int z){    if(z==1)    printf("%d",*(int*)a); // If user inputs 1, then he means the data is an integer and type casting is done accordingly.    else if(z==2)    printf("%c",*(char*)a); // Typecasting for character pointer.    else if(z==3)    printf("%f",*(float*)a); // Typecasting for float pointer}关于空指针,您应记住的另一个重要点是–不能在空指针中执行指针算术。void *ptr;int a;ptr=&a;ptr++; // This statement is invalid and will result in an error because 'ptr' is a void pointer variable.所以现在我明白了我的错误。我正在更正。参考文献:http://www.antoarts.com/void-pointers-in-c/http://www.circuitstoday.com/void-pointers-in-c。新代码如下所示。#include#define INT 1#define FLOAT 2void absolute_value ( void *j, int *n){    if ( *n == INT) {        if ( *((int*)j) < 0 )            *((int*)j) = *((int*)j) * (-1);    }    if ( *n == FLOAT ) {        if ( *((float*)j) < 0 )            *((float*)j) = *((float*)j) * (-1);    }}int main(){    int i = 0,n=0;    float f = 0;    printf("Press 1 to enter integer or 2 got float then enter the value to get absolute valuen");    scanf("%d",&n);    printf("n");    if( n == 1) {        scanf("%d",&i);        printf("value entered before absolute function exec = %d n",i);        absolute_value(&i,&n);        printf("value entered after absolute function exec = %d n",i);    }    if( n == 2) {        scanf("%f",&f);        printf("value entered before absolute function exec = %f n",f);        absolute_value(&f,&n);        printf("value entered after absolute function exec = %f n",f);    }    else    printf("unknown entry try againn");    return 0;}   

最后

以上就是乐观盼望为你收集整理的c语言中void类型的指针,C程序中void指针的概念的全部内容,希望文章能够帮你解决c语言中void类型的指针,C程序中void指针的概念所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部