zoukankan      html  css  js  c++  java
  • C语言-指针到底是什么?

    1、指针到底是什么?
    (1)、指针变量与普通变量的区别
     指针的实质就是一个变量,他跟普通变量没有任何本质区别。指针完整的名字应该叫做指针变量,简称为指针。
    2、为什么需要指针?
    (1)、指针的出现是为了实现间接访问。在汇编中都有间接访问,其实就是CPU的寻址方式中的间接寻址。
    (2)、间接访问(CPU的间接寻址)是CPU设计时决定的,这个决定了汇编语言必须能够实现间接寻址,又决定了
        汇编之上的C语言也必须实现间接寻址。
    (3)、高级语言Java/C#等没有指针,那么他们怎么实现间接访问?答案就是语言本身帮助我们封装好了。
    3、指针使用三部曲:
         定义指针变量(int *p)、
         关联指针变量(p = &a // 让p指向变量a )(p = (int *)4 //让p指向内存地址为4的那个变量)
      解引用(*p = 555;//把555放到p所指向的变量中)
    (1)、当我们int *p;定义一个指针变量p时,因为p是局部变量,所以也遵循C语言局部变量的一般规律(定义局部
    变量并且未初始化,则值是随机的),所以此时p变量中存储的是一个随机的数字。
    (2)、此时如果我们解引用p,则相当于我们访问了以这个随机数字为地址的内存空间。那这个空间到底能不能访问
    到就不知道了(可能行也可能不行),所以如果直接定义指针变量未绑定有效地址就去解引用的话,几乎会出现大的bug。
    (3)、指针绑定的意义就在于:让指针指向一个可以访问、应该访问的地方,指针的解引用是为了间接访问目标变量。

    4、*星号在用于指针相关功能的时候,有两种用法:
      第一种:定义指针时,*结合前边的类型用于表明要定义的指针类型;
       int *p;  // *和int结合,表明p的类型是int *,也就是p指向int类型变量的指针。
      第二种:用于指针解引用,解引用时*p表示p指向的变量本身。
       int *p;
       int a = 32;
       p = &a;   //这个地方就是第二种用法,这里不能写 *p = &a; 这样写的意思就是把a的地址给了p所指向的
                   那个变量(也就是地址为 内存中与p绑定在一起的那个内存空间里的数 的内存空间)。


     

  • 相关阅读:
    Configuring ISC DHCPv6 Server
    不兼容的签名实现,
    12个Flex常用功能代码
    水平和垂直翻转可视对象
    在as3中只有事件(或该事件的子级)的发送者才能侦听事件
    addChild一个.swf时,该swf的背景色失效,同时如有超出大小的范围,也会显示,造成边距
    1.随机函数,计算机运行的基石
    flex builder3如何设置默认浏览器
    字体轮廓和设备字体
    Flex Develpment中右边的框的linkWithEdit
  • 原文地址:https://www.cnblogs.com/jiangtongxue/p/11357088.html
Copyright © 2011-2022 走看看