zoukankan      html  css  js  c++  java
  • C语言-(void*)类型指针

    (void*)类型指针:ANSI新增的:即定义了一个指针,但不指定指向任何类型(即指向抽象的数据类型)。void是空类型,只保存了指针的值,而丢失了类型信息

    1 通过强制类型转换可将其值赋给另一指针变量

    2.1用于动态存储函数的返回型指针 void malloc/calloc()

    2.2也可用于函数 void*fun() //表示返回值是一个地址,指向空(抽象)数据类型

    空指针NULL:不指向任何对象,不同于未初始化的野指针。

    #ifdef __cplusplus
         #define NULL    0
    #else    
         #define NULL    ((void *)0)
    #endif

    数组与指针:数组所占存储空间的内存:sizeof(数组名) 数组的大小: sizeof(数组名)/sizeof(数据类型)

    const 和 指针

    • 指向常量的指针,值不能改变,指向可改变
    • 常指针值能改变,指向不可改变
    • 指向常量的常指针,都不能改变
    #include <stdio.h>
     
    int main()
    {
      // 1 指向常量的指针:指向可变,值不能变可改变指针
      const int a = 10;
      int e = 20;
      int *p = &a;
      p=&e; //可指向其它对象
      //*p = 1000;//但指向&a后其值*a就不能变化
      printf("*p = %d
    ", *p);
     
      // 2 可改变指针
      const b = 10;
      int *pb = &b;
      pb = p;
      printf("*pb = %d
    ", *pb);
     
      // 3常指针
      const c = 10;
      int * const pc = &c;//常指针指向一个对象后指向不能变
      *pc = 1000; //但值可变(指向对象的值)
      //pc = pb;不能改变
     
      //4指向常量的常指针
      const d = 10;
      const * int const pd = &d;
      //*pd = 1000;都 不能改变
     
     
      printf("
    ");
      return 0;
    }
    View Code

    深拷贝与浅拷贝:

    浅拷贝即通过指针赋值的方法实现指向,但如果浅拷贝后要删除就会使另外对象中的指针就会无效,形成所谓的野指针,而访问无效指针是危险的。

  • 相关阅读:
    《游戏引擎架构》笔记十二
    《游戏引擎架构》笔记十一
    《游戏引擎架构》笔记十
    《游戏引擎架构》笔记九
    《游戏引擎架构》笔记八
    《游戏引擎架构》笔记七
    2000行代码实现软渲染引擎
    C++ 构造函数或析构函数调用虚函数
    C++ protected访问权限思考
    堆排序
  • 原文地址:https://www.cnblogs.com/jieruishu/p/3877579.html
Copyright © 2011-2022 走看看