C++中指针的研究与应用

2011-12-31 00:00:00张志强
电脑知识与技术 2011年14期


  摘要:C++程序设计中的指针是一种数据类型,具有指针类型的变量称为指针变量,它是用来存放其他变量或对象的地址,能正确灵活地使用好指针可以给程序带来很优化的结构设计思想和很高的工作效率。
  关键词:指针;数组;函数;对象
  中图分类号: TP311 文献标识码:A文章编号:1009-3044(2011)14-3366-04
  指针是地址形象化的表示,它的应用在C++编程中是一个非常重要而且很难理解的一个环节,通过学习我们知道一般的变量是用来记录数据而指针变量是用来记录地址的。
  1 空指针
  空指针是指在程序中不指向任何变量或对象的地址,它的值是NULL,与任何有效指针的值都不同。其中NULL是在中定义的一个宏,代表为0。
  C++中指针的值不能是整型值,但空指针是个例外,即空指针的值可以是一个纯粹的零。
  例如:int*pa=0;/*空指针*/
  空指针的值并不必须是一个纯粹的零,在编程时定义空指针会给我们带来任意访问不同变量或地址的随机性,但无法对它进行取内容操作,只有在真正指向了一个有意义的地址后我们才能对它进行取内容运算。
  2 指针与一般变量
  使用指针时分清变量的地址、指针、指针变量的值之间的区别和联系至关重要。如:
  inti=9;
  int*p; /*指针变量*/
  p=&a /*p指向a的起始地址2000*/
  我们知道指针的运算有①&:取地址运算符②*:指针指向运算符,如图1。
  1)*p=9; /*取到a的值*/
  2)&*p=2000/2001; /*指向运算后进行取地址*/
  3)*&a=9; /*取地址即p再进行指向运算*/
  3 指针与数组
  C++规定数组名代表数组的首地址,即第一个元素的地址,当然指针也可以指向数组以后的内存单元,即支持指针加(含自增)或减(含自减)运算。如图2。
  charstr[10];
  char*p;
  p=str;/* p指向数组的首地址*/
  这样p=&str[0];与p=str;是等价的,而p+i和str+i代表地址指向str数组的第i个元素。
  3.1 用指针引用数组元素
  通过指针运算可以很方便地找到数组中的任意一个元素,达到引用数组元素的目的。
  例1编程从键盘上输入若干个字符后统计所输入的字符个数。
  #include
  void main()
   {intcount=0;
  chara[200];
  char*p;
  cout<<“输入字符:”<  cin>>a;
  p=a;/*指针p指向数组的首地址*/
  while(*p!=’\\0’)
  {count++;
  p++;}
  cout<<“字符个数:”<  不用new函数定义动态数组而巧妙地用指针指向数组的首地址即p=a;这样通过判断*p!=‘\\0’是否成立,一直到最后一个元素。这里要注意字符串存储时是以‘\\0’来结束的,当指针指向数组时实际上是指向所输入的第一个字符,而字符串数组可以整体进行输入和输出像cin>>a等。
  3.2 指针数组
  指针数组是指数组中的每一个元素都为一个指针变量,如:
  char*p[5] ={"td