转自: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\n",*ap);

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

结果是:

10

10

10

转载--void指针(void *的用法)的更多相关文章

  1. void指针(void*)用法

    首先看一段测试代码: #include <stdio.h> int void_test(void* data) { ; num = *(int*)data; printf("nu ...

  2. (转)void指针(void *的用法)

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

  3. C++学习笔记(十一):void*指针、类型转换和动态内存分配

    void*指针 void关键字表示“空类型”的概念.但是,这里的“空类型”不表示“任意类型”,而是表示不存在的意思,也就是说C/C++不允许你写语句void a,不存在类型为void的东西. void ...

  4. 指针版的PStash(用一个void指针数组, 来保存存入元素的地址) 附模板化实现 p321

    由容器PStash的使用者,负责清除容器中的所有指针.所以用户必须记住放到容器中的是什么类型,在取出时,把取出的void指针转换成对应的类型指针,然后 'delete 转换后的对象指针',才能在清除时 ...

  5. void类型及void指针(转载)

    转载 https://www.cnblogs.com/pengyingh/articles/2407267.html 2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针” ...

  6. 【转载】C/C++语言void及void指针深层探索

    C/C++语言void及void指针深层探索 1.概述许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并详述vo ...

  7. void类型指针的基本用法

    void作为指针时可以用任意类型的的指针值都可以给它进行赋值和传递,但是输出时必须时显性输出 代码如下: #include<cstdio> #include<iostream> ...

  8. 你必须知道的指针基础-7.void指针与函数指针

    一.不能动的“地址”—void指针 1.1 void指针初探 void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据.和用int表示指针异曲同工,只是更明确是“指针” ...

  9. 不要伤害指针(5)--void和void指针详解

    原文转载地址:http://blog.csdn.net/sunchaoenter/article/details/6587426 增加自己的想法,作为笔记. 1.概述 许多初学者对C/C++语言中的v ...

随机推荐

  1. 【BZOJ2876】【NOI2012】骑行川藏(数学,二分答案)

    [BZOJ2876][NOI2012]骑行川藏(数学,二分答案) 题面 BZOJ 题解 我们有一个很有趣的思路. 首先我们给每条边随意的赋一个初值. 当然了,这个初值不会比这条边的风速小. 那么,我们 ...

  2. 《Java程序设计》第7周学习总结 20165218 2017-2018-1

    20165218 2017-2018-1 <Java程序设计>第7周学习总结 教材学习内容总结 JDBC与MySQL数据库 数据库的功能:数据的存储.查询.修改.安全 MySQL:数据库: ...

  3. BNU-2017.7.4排位赛2总结

    链接:https://www.bnuoj.com/v3/contest_show.php?cid=9147#info A题 sort之后交换首尾两个数. B题 for一遍,如果每个数都在对应位置了,输 ...

  4. sloop公共程序之初始过程及启动

    1:sloop_init() 初始化主要是初始化静态sloop_*** 结构体和填充struct sloop_data 结构体中的成员. //初始化静态存储区给sloop_***结构体 static ...

  5. 《提升c++性能的编程技术》读书笔记

    http://note.youdao.com/noteshare?id=9ab0eda264c85b774021426867e18eae

  6. HAOI2017游记

    HACF的最终成绩已经出炉,但是事情还没有结束. 好多想说的,不知道从何说起,就按照时间顺序说吧. 考前 考前大概一周半就开始复习了,一些比较重要的算法,比如KDT,单纯性,线性基等等没有再继续学,所 ...

  7. bzoj 1367: [Baltic2004]sequence

    1367: [Baltic2004]sequence Time Limit: 20 Sec  Memory Limit: 64 MB Description Input Output 一个整数R Sa ...

  8. 数学&搜索:博弈论之极大极小搜索与alpha-beta减枝

    目的是寻找最优的方案使得自己能够利益最大化. 基本思想就是假设自己(A)足够聪明,总是能选择最有利于自己的方案,而对手(B)同样足够聪明,总会选择最不利A的方案 对抗搜索就是对于先手来说,取后手中状态 ...

  9. Integer Numbers

    ZOJ Problem Set - 3365 Integer Numbers Time Limit: 1 Second      Memory Limit: 32768 KB      Special ...

  10. [linux]ubuntu在线安装mysql

    1. sudo apt-get install mysql-server   2. apt-get isntall mysql-client   3.  sudo apt-get install li ...