c语言指针之void

来源:互联网 发布:上海地铁客流量数据 编辑:程序博客网 时间:2024/05/29 04:22

void有两种使用使用场景:

  • 如果函数没有返回值或者参数,那么应该声明为void。
  • 声明一个void的指针类型,对于void的指针类型,它只保存了一个地址,不包含指向变量的指针类型,因此,任何类型的指针变量都可以赋值给它,而不需要类型转换

//

//  main.c

//  pointer1

//

//  Created by eric wang on 15/12/10.

//  Copyright © 2015 eric. All rights reserved.

//


#include <stdio.h>


int main(int argc,constchar * argv[]) {

    // insert code here...

    int a=10;

    void *vp;

    int *ip;

    int *ip1;

    ip=&a;

    vp=ip;

    printf("%d\n",*ip);

    printf("%p %p\n",ip,vp);

    /**

     *  void 指针类型转 int指针类型时候,必须强制转换,不然就会报错,类型冲突

        ip1=*vp;(错误)

     */

    ip1=(int *)vp;

    

    printf("%d %d\n",*ip,*ip1);

    printf("%p %p %p\n",ip,vp,ip1);

    a=34;

    

    

    printf("%d %d\n",*ip,*ip1);

    printf("%p %p %p\n",ip,vp,ip1);

    

 

    return0;

}


10

0x7fff5fbff78c 0x7fff5fbff78c

10 10

0x7fff5fbff78c 0x7fff5fbff78c 0x7fff5fbff78c

34 34

0x7fff5fbff78c 0x7fff5fbff78c 0x7fff5fbff78c

Program ended with exit code: 0






//使用void指针潜在的危险,类型转换的错误。

//

//  main.c

//  pointer1

//

//  Created by eric wang on 15/12/10.

//  Copyright © 2015 eric. All rights reserved.

//


#include <stdio.h>


int main(int argc,const char * argv[]) {

    void foo(void *p);

    void foo1(void *p);

    int b=23;

    foo(&b);

    foo1(&b);

 

    return0;

}

void foo(void *p)

{

    float *pf=p;

    printf("%p %f\n",pf,*pf);

}


void foo1(void *p){

    int *p1=p;

    printf("%p %d\n",p1,*p1);

}

0x7fff5fbff78c 0.000000

0x7fff5fbff78c 23

Program ended with exit code: 0



0 0
原创粉丝点击