void 指针小结

 

http://hi.baidu.com/%B3%CB%B7%E7%CC%A4%C0%CB2008/blog/item/ff1066faeb5a19929e5146ad.html

今天在看memcpy函数原型的时候遇到void指针,我有些地方不明白,就从网上搜集了一些资料,然后总结一下。

先来看下memcpy函数的原型:

void * memcpy ( void * destination, const void * source, size_t num )

我开始以为void指针可以进行应用和计算,出现如下愚蠢的错误:

void * dest,src;

*dest ++= *src++;

知错就改,补习一下指针的知识。

基本概念:“指针”是指地址, 是常量,“指针变量”是指取值为地址的变量。 定义指针的目的是为了通过指针去访问内存单元。

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

(1)void指针是一种特别的指针。void指针没有特定的类型,因此只知道地址而不能由类型判断出指针所指变量或者对象的长度。

  void * vp;

(2)任何类型的指针都可以赋给void指针。不需要类型转换,vp只是获取地址,并没有获得变量或者对象的长度。

  type * p;

  void* vp = p;

(3)void指针赋值给其他类型的指针时都要进行转换

  void * vp  =pointer; // vp指向一个变量

  type *p = (type*) vp; //类型转换

(4)void指针不能引用

    void * vp  =pointer; // vp指向一个变量

   *vp // 错误的

(5)void指针不能参与指针运算,除非进行转换

void * dest, *src;

*dest ++= *src++;  //错误的

void * vp  =pointer;

(type*)vp++  //进行类型转换后才可以进行指针运算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值