zoukankan      html  css  js  c++  java
  • 指针

    指针变量

    指针变量是指存放地址的变量。

    概述:
    存放地址的变量称为指针变量。指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。
    假设在程序中声明了1个int型的变量a,其值为68。
    系统为变量a分配的首地址为0X65FDF4H,
    pa是存放变量a地址的指针变量,即pa中存放的值为0x065FDF4H。
     
    对变量a的访问有两种方式:
    一是直接按地址0x065FDF4H找到a的存储单元,从而对变量a进行访问;
    二是按系统为pa分配的地址先找到pa,然后根据pa的值(即变量a地址0x065FDF4H)找到变量a在内存中的存储单元,从而对变量a进行访问。
    对于前一种访问方式称为直接访问方式,后一种访问方式称为间接访问方式。
    如果一个指针变量存放的是某个对象的地址,则称这个指针变量指向该对象。在C++程序设计中,指针变量只有确定了指向才有意义。
     
    定义:
    1. 定义指针变量的一般形式如下:
      类型名 *指针变量名1*指针变量名2... *指针变量名n ;
    2. 空指针
      空指针是一个特殊的指针,它的值是0,C语言中用符号常量NULL(在stdio.h中定义)表示这个空值,并保证这个值不会是任何变量的地址。空指针对任何指针类型赋值都是合法的。一个指针变量具有空指针值表示当前它没有指向任何有意义的东西。
    3. void指针
        (void *)类型的指针叫通用指针,可以指向任何的变量,C语言允许直接把任何变量的地址作为指针赋给通用指针。但是有一点需要注意void*不能指向由 const 修饰的变量, eg.
      const int test;
      void * ptv;
      ptv = &test;
    第三句是非法的,只有将ptv申明为const void * ptv;上述第三句(ptv = &test),才是合法的.
    当需要使用通用指针所指的数据参加运算时,需要写出类型强制转换。如通用指针ptv 所指空间的数据是整形数据,p是整型指针,用此式转换:p=(int *)ptv ;
     
    区别:
    指针是C语言的精华部分,通过利用指针,我们能很好地利用内存资源,使其发挥最大的效率。有了指针技术,我们可以描述复杂的数据结构,对字符串的处理可以更灵活,对数组的处理更方便,使程序的书写简洁,高效,清爽。但由于指针对初学者来说,难于理解和掌握,需要一定的计算机硬件的知识做基础,这就需要多做多练,多上机动手,才能在实践中尽快掌握,成为C的高手。
    过去,我们在编程中定义或说明变量,编译系统就为已定义的变量分配相应的内存单元,也就是说,每个变量在内存会有固定的位置,有具体的地址。由于变量的数据类型不同,它所占的内存单元数也不相同。若我们在程序中做定义为:
      int a=1,b=2;
      float x=3.4, y = 4.5 ;
      double m=3.124;
      char ch1='a', ch2='b';
    让我们先看一下编译系统是怎样为变量分配内存的。变量a,b是整形变量,在内存各占2个字节;x,y是实型,各占4个字节;m是双精度实型,占8个字节;ch1,ch2是字符型,各占1个字节。由于计算机内存是按字节编址的,设变量的存放从内存2000单元开始存放,则编译系统对变量在内存的安放情况如下图所示。
     
    变量在内存中按照数据类型的不同,占内存的大小也不同,都有具体的内存单元地址,如变量a在内存的地址是2000,占据两个字节后,
    变量b的内存地址就为2002,变量m的内存地址为2012等。对内存中变量的访问,过去用 scanf("%d%d%f",&a,&b,&x)表示将数据输入变量的地址所指示的内存单元。那么,访问变量,首先应找到其在内存的地址,或者说,一个地址唯一指向一个内存单元,我们称这个地址为变量的指针。如果将变量的地址保存在内存的特定区域,用变量来存放这些地址,这样的变量就是指针变量,通过指针对所指向变量的访问,也就是一种对变量的“间接访问”。
    设一组指针变量pa、pb、px、py、pm、pch1、pch2,分别指向上述的变量a、b、x、y、m、 ch1、ch2,指针变量也同样被存放在内存,尽管所指向的变量类型不同,但是这些指针变量所占内存空间都是2个字节,而与所指向变量的类型无关。二者的关系如右图所示:
    在上图中,左部所示的内存存放了指针变量的值,该值给出的是所指变量的地址,通过该地址,就可以对右部描述的变量进行访问。如指针变量pa的值为2000,是变量a在内存的地址。因此,pa就指向变量a。变量的地址就是指针,存放指针的变量就是指针变量。
  • 相关阅读:
    metal的gpu query
    体积雾 global fog unity 及改进
    hdr rt format对颜色的影响
    unity deferred lighting
    unity linear space时 photoshop blend的正确设置
    unity linear work flow
    一些数据 bandwidth之类
    deferred rendering with msaa
    unity 显示mipmaplevel
    【转】在C#中使用SendMessage
  • 原文地址:https://www.cnblogs.com/try-again/p/4942379.html
Copyright © 2011-2022 走看看