background image

简述

语言指针的应用

    C 语言是计算机软件领域最为经典的编程语言之一,尤其在底层驱动、硬件控制等应用领
域,更是

C 语言的价值所在,这是 JAVA,C#等新兴高级语言所不具备的优势所在,通过

C 语言的指针操作系统内存,以及位运算控制系统的各个外部 I/O 端口,C 语言被广泛应用
到硬件系统的控制中,指针的应用是

C 语言的灵魂,指针实现了 C 语言的灵活性、可变性。

以下对

C 语言中指针的应用与价值进行探讨与阐述。 

  

C 语言编程过程中,假设定义一个变量,编译时就为这个变量分配一定长度的内存空

间。而在内存区每一个内存单元都有一个地址,用来标识内存单元,在地址所标识的单元存
放数据。而正确使用指针变量,区分指针变量和指针的指向变量的含义和用法,判断变量与
运算符的结合顺序来确定变量的数据类型以及指向变量或成员变量的类型。通过指针来访问
数组元素和下标法数组元素的等价关系,作为函数参数的指针变量,可以改变所指向的主
调函数变量的值。动态存储分配、对链表的创建以及相关操作都可以运用指针实现。

 

  类成员的指针,类成员与外部变量相互比较,进行区分的方法就是它所在的域的不同
因为域的不同而决定了变量可以使用的范围,一个指向类的成员函数或者成员变量的指针
就要规范它的参数列表、返回类型,以及被指向变量或函数的域,所以使用类域限定如下:

 

   

classNJUPT{  staticdoublenumber=20000000 ;   intnum ;   public :   NJUPT ( ) :

num(10){}; intget(){returnnum;}; doublegetNumber(){reuturnnumber;}} 
  在这里定义的成员指针为

intNJUPT::*p;//指向 int 型成员变量 int(NJUPt::

*)p()//指向 intf()型成员函数。 
  那么调用的方式为:

cout<;*p)(); 

  返回指针的函数,一个函数的接口是它的返回值,

C 语言可以自定义类型,我们使用

引用作为函数的实际参数,或在函数的实际参数中使用指针。使用一个函数返回一个指针很
容易将一个局部变量的地址传出来。例如:

 

  

UserType*Process(){ UserTypeut(param

—list); //processut; return&;ut;//} 

  变量在函数运行结束已经被销毁,被传出的地址实际已经不存在被释放了。所以很容易
出错。另一点是在运用

new 的时候。易造成内存泄露。 

   

UserType*Process ( ) {  UserTpye*put=newUserType ( param

—list ) ;   //processput ; 

returnput;} 
  在函数内部使用一个

new,分配了一个空间传出来。这样就不会发生问题,只是编程过

程中通常会忘记在程序的外面把借来的空间还回去而造成内存泄露,所以把函数的参数设
定为指针或引用作为代替。

 

  两指针变量相减:所得之差是两个指针所指数组元素之间相差的元素个数。实际上是两
个指针值(地址)相减之差再除以该数组元素的长度(字节数)。例如

pf1 和 pf2 是指向同

一浮点数组的两个指针变量,设

pf1 的值为 2010H,pf2 的值为 2000H,而浮点数组每个元

素占

4 个字节,所以 pf1

—pf2 的结果为(2000H—2010H)/4=4,表示 pf1 和 pf2 之间相差 4

个元素。两个指针变量不能进行加法运算。例如,

pf1+pf2 是什么意思呢?毫无实际意义。 

  

this 指针的用处:一个对象的 this 指针并不是对象本身的一部分,不会影响 sizeof(对

象)的结果。

this 作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时

候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有
写上

this 指针,编译器在编译的时候也是加上 this 的,它作为非静态成员函数的隐含形参,

访

this

date.SetMonth(9)<===>SetMonth(&date,9),this 帮助完成了这一转换. 
  以上是学习指针过程中个人总结出来的观点和方法,希望初学

C 语言或对指针有迷惑