zoukankan      html  css  js  c++  java
  • 无类型指针(void×)

    演示代码下载

    1.void * 指针是 一种特殊的指针 

       void *p
      //
    说它
    特殊是因为它没有类型 
      //
    或者说这个类型不能判断出指向对象的长度 

    2.
    任何指针都可以赋值给void指针 
      type *ptr;
      p=
    ptr;
      //
    不需转换

    // 只获得变量/对象地址而不获得大小

    3.void
    * 指针赋值给其他类型的指针时都要进行转换 
       type *ptr=(type*)p;
       //
    转换类型也就是获得指向变量/对象大小 

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

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

    举例:
    编程实现memcpy函数

    // TestVoidPointer.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
     #include <stdio.h>
     #include <assert.h>
     
        void *memcpy(void *Dest, const void *Src, size_t size)
        {
            assert((Dest!= NULL) && (Src!= NULL)); //Dest和Src必须有效
            char *src= (char *)Src;                //保存Src首地址,无类型指针赋值给char 指针要进行转换
            char *des= (char *)Dest;            //保存Dest首地址,无类型指针赋值给char 指针要进行转换
            while(size -- > 0)                       //循环size次,复制src的值到des中
            {
                *des++ = *src++ ;
            }
           return des;
       }
    
       int _tmain()
       {
           char strSrc[] = "Hello World!";    //将被复制的字符数组
           char strDest[20];                         //目的字符数组
          
           memcpy(strDest, strSrc, 4);        //复制strSrc的前4个字符到strDest中
           strDest[4] = '\0';                        //把strDest的第5个元素赋为结束符'\0'
           printf("strDest: %s\n", strDest);
     
           return 0;
       }
    

      

      

  • 相关阅读:
    Nucleus 的网络部分
    VS2005中TextBox的ReadOnly属性(转贴)
    VS2005中TextBox的ReadOnly属性导致的问题
    外部中断
    Linux操作系统文件链接问题
    IIS 服务不能自动启动
    转贴:[C++]static用法
    串口测试的一些体会
    字符串的两种声明方式
    Tornado 2.2 中vxsim出问题的解决方法
  • 原文地址:https://www.cnblogs.com/gmth/p/3065224.html
Copyright © 2011-2022 走看看