zoukankan      html  css  js  c++  java
  • 转载--void指针(void *的用法)

    转自:jimmy

    指针有两个属性:指向变量/对象的地址长度 
    但是指针只存储地址,长度则取决于指针的类型 
    编译器根据指针的类型从指针指向的地址向后寻址 
    指针类型不同则寻址范围也不同,比如: 
    int*从指定地址向后寻找4字节作为变量的存储单元 
    double*从指定地址向后寻找8字节作为变量的存储单元 

    1.void指针是一种特别的指针 
       void *vp 
       //说它特别是因为它没有类型 
       //或者说这个类型不能判断出指向对象的长度 

    2.任何指针都可以赋值给void指针 
       type *p; 
       vp=p; 
       //不需转换 
       //只获得变量/对象地址而不获得大小 

    3.void指针赋值给其他类型的指针时都要进行转换 
       type *p=(type*)vp; 
       //转换类型也就是获得指向变量/对象大小 
    转:http://icoding.spaces.live.com/blog/cns!209684E38D520BA6!130.entry 

    4.void指针不能复引用 
       *vp//错误 
       因为void指针只知道,指向变量/对象的起始地址 
       而不知道指向变量/对象的大小(占几个字节)所以无法正确引用 

    5.void指针不能参与指针运算,除非进行转换 
       (type*)vp++; 
       //vp==vp+sizeof(type)

    void * 和 void 在函数返回值中的区别

    一个很容易糊涂的问题.

    在函数的返回值中, void 是没有任何返回值, 而 void * 是返回任意类型的值的指针.

    还是看代码吧:

    #include <stdlib.h>
    #include <stdio.h>

    void voidc(int a); 
    void* voidcp(int *a);
    int main(){
        int      a=10;
        int     *ap;

        voidc(a);
        ap = voidcp(&a);
        printf("%d ",*ap);

        return 0;
    }
    void voidc(int a){ 
        printf("%d ",a);
        return;    // 没有返回值
    }
    void* voidcp(int *a){
        printf("%d ", *a);
        return a;  // 返回 int *
    }

    结果是:

    10

    10

    10

  • 相关阅读:
    SQL Server分页查询的万能存储过程
    前端相关及一些关键单词
    java shiro面试题
    java集合面试题
    芬芬购物系统基础配置2
    芬芬购物系统基础配置
    多线程安全
    多线程入门
    JAVA多线程
    java多线程
  • 原文地址:https://www.cnblogs.com/chenyang920/p/5724573.html
Copyright © 2011-2022 走看看