• 学前教育
  • 小学学习
  • 初中学习
  • 高中学习
  • 语文学习
  • 数学学习
  • 英语学习
  • 作文范文
  • 文科资料
  • 理科资料
  • 文档大全
  • 当前位置: 雅意学习网 > 文科资料 > 正文

    C++中的指针的解析|C中指针

    时间:2019-01-08 03:14:43 来源:雅意学习网 本文已影响 雅意学习网手机站

      摘 要: 指针是C++语言中最难掌握的概念之一,错误地使用指针所带来的后果往往是很严重的,有时甚至会导致系统崩溃。因此,正确使用指针是C++语言学习的重点和难点。   关键字: C++指针 地址 解析
      
      计算机内存是由二进制位组成的,为了便于访问和管理,每8位组成一个字节,一个字节称为一个存储单元。通常,系统对每个存储单元按期顺序进行编号,编号能惟一确定任何一个字节的位置,就像根据房间号能惟一确定任何一个房间一样,于是编号被形象地称为地址。程序所处理的每一个数据必须存放于计算机内存中才能运行,这些数据按其所属的数据类型,需要占据一定数量的连续的存储单元,而这些存储单元都位于内存的某个特定位置,都有一个惟一的起始地址。
      因为地址指示了字节在存储器中的位置,所以地址也被形象地称为指针。指针是一个存储单元的地址值,用来存放地址(即指针)的变量称为指针变量,常常将指针变量简称为指针。C++中的指针按照它所指向的对象可以划分为变量指针、数组指针、函数指针、对象指针、类的数据成员指针和类的成员函数指针。
      一、变量的指针
      1.设type代表任意一种基本说明符,则:
      type x;//声明了一个type型变量x。
      type*p;//声明了一个type型指针变量p,“*”表示声明的p是一个指针变量,p所指向的变量的类型是type型。
      p=&x;//指针变量p指向了变量x,&是地址符号,&x表示变量x的地址。只有变量x的数据类型和指针变量p所指向的变量的数据类型相同才可作此操作。
      2.可声明多级指针变量,如:
      type**p;//声明了一个指向type类型的二级指针变量p。
      二、数组与指针
      1.数组的指针
      type a[3];//声明了一个具有三个type类型数据的数组。
      在这里a有两个涵义:
      ①作为数组名,表示数组这个整体。
      ②表示这个数组在内存所占的一段连续的存储单元的起始地址,也就是这个数组中第一个元素的地址,即&a[0]。
      type*p;//声明了一个type型指针变量p。
      p=a;//将数组的起始地址赋给指针变量,使指针变量p指向数组,相当于p=&a[0]。
      2.数组指针
      type(*p)[3];//声明了一个指针p,这个指针指向具有3个的type类型元素的数组。
      3.指针数组
      type*p[3];//声明了一个具有三个指针元素的数组,每个元素都是可以指向type类型数据的指针变量
      三、函数与指针
      1.返回指针值的函数
      函数的返回值可以是整型、浮点型、字符型等基本类型,也可以是指针类型。如:int*f(),则函数的返回值是一个指向整型数据的指针,称这个函数为返回指针值的函数。
      type*(形参表)
      {
      ……
      }//定义了一个返回指针值的函数
      void main()
      {
      type*p;
      p=f(实参表);//函数调用,p接收的是函数f返回的指向type类型数据的指针
      ……
      }
      2.函数指针
      函数名就是函数的入口地址,函数指针就是指向函数入口地址的指针变量,即存放函数入口地址的变量。
      type(*p)(type x);//定义了一个名为p的函数指针
      type f(type x)
      {
      ……
      }//定义名为f的type函数。
      p=f;//将函数f()的入口地址赋给函数指针变量p,即使指针变量p指向函数f(),只能将与函数指针变量具有同类型、同参数的函数名赋给函数指针变量。
      四、对象指针
      设有一个类A,a和f()分别是类A公有数据成员和公有成员函数,则:
      A t;//声明了一个类A的对象t,则&t是对象t的地址。
      A*p;//声明了一个指向类A的指针变量p。
      p=&t;//将指针变量p指向了类A的对象t。
      用指针p调用对象t的数据成员和成员函数的格式为:p→a;和p→f()。
      五、类的成员数据指针
      设t是A类的一个对象,a是A的一个非静态type型成员数据,s是A的一个静态type1型数据成员,则:
      1.①A∷a的相对指针常量为&A∷a;
      ②A∷s的物理指针常量为&A∷s。
      2.①可以指向A类的type型非静态成员的指针p1的声明格式为:type A∷*p1;
      ②可以指向A类type型静态成员的指针p2的声明格式为:type1*p2。
      3.①使p1指向A∷a的方式为:用& A∷a初始化p1或在声明了p1后向p1赋值;
      ②使p2指向A∷s的方式为:用& A∷s初始化p2或在声明了p2后向p2赋值。
      4.①用p1而不用a来访问t.a的格式为:t.*p1;
      ②用p2而不用s来访问t.s的表达式为*p2。
      六、类的成员函数指针
      设t是A类的一个对象,f(FL1)是A类的一个type型非静态的函数成员,g(FL2)是A类的一个type1型静态函数成员,则:
      1.①A∷f()的相对指针常量为A∷f;
      ②A∷g()的物理指针常量为A∷g。
      2.①可以指向A的非静态type型形参表为FL1的函数成员的指针P1的声明格式为type(A∷*p1)(FL1);
      ②可以指向A的静态type1型形参表为FL2的函数成员的指针p2的声明格式为:type1(*p2)(FL2)。
      3.①使p1指向A∷f()的方式是:用A∷f初始化p1或在声明了p1后向p1赋值;
      ②使p2指向A∷g()的方式是:用A∷g初始化p2或者在声明了p2之后向p2赋值。
      4.①用p1而不用f来访问t.f()的格式为:(t.*p1)(实参表);这里的“*”为指针说明符而不是指针运算符;
      ②用p2而不用g()来访问t.g()的格式为:p2(实参表)。
      指针是C++语言中最难掌握的概念之一,错误地使用指针所带来的后果往往是很严重的,有时甚至会导致系统崩溃。因此,正确使用指针是C++语言学习的重点和难点。
      
      参考文献:
      [1]谭浩强.C++语言程序设计.清华大学出版社.
      [2]周正德,侯正昌.C++程序设计(第2版).电子工业出版社.
      [3]邓振杰.C++程序设计.人民邮电出版社.
      [4]余建军,张铁头.C++程序设计.中国计划出版社.
    本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文

    推荐访问:指针 解析

    • 文档大全
    • 故事大全
    • 优美句子
    • 范文
    • 美文
    • 散文
    • 小说文章