如何掌握C++指针基础

开发 后端
学习C++指针基础先要了解什么是C++指针,指针是一个无符号整数,它是一个以当前系统寻址范围为取值范围的整数。

C++指针就像是其它变量一样,所不同的是一般的变量包含的是实际的真实的数据,而指针是一个指示器,这些都是一些C++指针基础性的问题,也是C++中指针中的一个非常重要的概念。

它告诉程序在内存的哪块区域可以找到数据。这是一个非常重要的概念,有很多程序和算法都是围绕指针而设计的,如链表。如何定义一个指针呢?就像你定义一个其它变量一样,只不过你要在指针名字前加上一个星号。

我们来看一个例子:下面这个程序定义了两个指针,它们都是指向整型数据。你注意到在两个变量名前的“p”前缀了吗?这是程序员通常在定义C++指针基础时的一个习惯,以提高便程序的阅读性,表示这是个指针。现在让我们来初始化这两个指针

  1. #include <iostream.h> 
  2. void main()  
  3. {  
  4. // 声明变量:  
  5. int nNumber;  
  6. int *pPointer;  
  7. // 现在给它们赋值:  
  8. nNumber = 15;  
  9. pPointer = &nNumber;  
  10. //打印出变量nNumber的值:  
  11. cout<<"nNumber is equal to :"<< nNumber<<endl;  
  12. // 现在通过指针改变nNumber的值:  
  13. *pPointer = 25;  
  14. //证明nNumber已经被上面的程序改变  
  15. //重新打印出nNumber的值:   
  16. cout<<"nNumber is equal to :"<<nNumber<<endl;   

号读作“什么的地址”,它表示返回的是变量在内存中的地址而不是变量本身的值。在这个例子中,pNumberOne 等于some_number的地址,所以现在pNumberOne指向some_number. 如果现在我们在程序中要用到some_number,我们就可以使用pNumberOne.

我们来学习一个例子:在这个例子中你将学到很多,如果你对C++指针基础的概念一点都不了解,我建议你多看几遍这个例子,指针是个很复杂的东西,但你会很快掌握它的。这个例子用以增强你对上面所介绍内容的了解。它是用C编写的(注:原英文版是用C写的代码,译者重新用C++改写写了所有代码,并在DEV C++ 和VC++中编译通过!)

  1. #include <iostream.h> 
  2. void main()  
  3. {  
  4. // 声明变量:  
  5. int nNumber;  
  6. int *pPointer;  
  7. // 现在给它们赋值:  
  8. nNumber = 15;  
  9. pPointer = &nNumber;  
  10. //打印出变量nNumber的值:  
  11. cout<<"nNumber is equal to :"<< nNumber<<endl;  
  12. // 现在通过指针改变nNumber的值:  
  13. *pPointer = 25;  
  14. //证明nNumber已经被上面的程序改变  
  15. //重新打印出nNumber的值:   
  16. cout<<"nNumber is equal to :"<<nNumber<<endl;   

通读一下这个程序,编译并运行它,务必明白它是怎样工作的。如果你完成了,准备好,开始下一小节,这段程序先调用了SomeFunction函数,创建了个叫nNumber的变量。接着让C++指针基础pPointer指向了它。可是问题出在哪儿呢?当函数结束后,nNumber被删掉了,因为这一个局部变量。局部变量在定义它的函数执行完后都会被系统自动删掉。

也就是说当SomeFunction 函数返回主函数main()时,这个变量已经被删掉,但pPointer还指着变量曾经用过的但现在已不属于这个程序的区域。如果你还不明白,你可以再读读这个程序。

注意它的局部变量和全局变量,这些概念都非常重要。但这个问题怎么解决呢?答案是动态分配技术。注意这在C和C++中是不同的。由于大多数程序员都是用C++,所以我用到的是C++中常用的称谓。

【编辑推荐】

  1. C与C++中标准输入实现方式上的一点区别
  2. C++编译器如何对Const常量进行分配存储空间
  3. C++类库设计的基本构思与方法
  4. 玩转C++语言的几种方法
  5. 如何更好的进行C++代码编制
责任编辑:chenqingxiang 来源: javaeye.com
相关推荐

2011-07-15 01:38:56

C++this指针

2011-07-13 16:14:53

C++引用指针

2021-09-09 17:05:36

C++智能指针语言

2021-12-21 15:31:10

C++语言指针

2011-07-14 17:17:21

C++指针

2011-07-14 17:02:09

C++指针

2010-01-26 13:42:28

C++指针

2011-04-11 11:09:50

this指针

2021-06-10 08:51:57

C++指针声明指针相关概念

2014-01-24 09:49:01

C++指针

2021-10-27 16:27:20

C++指针操控

2011-04-19 16:38:00

对象指针指针C++

2021-08-30 19:03:09

C++指针数据

2011-07-15 00:47:13

C++多态

2010-02-04 09:33:08

C++指针重载

2011-04-19 09:19:09

C++指针

2011-07-12 13:01:00

CC++

2011-07-14 17:45:06

CC++

2011-07-13 18:24:18

C++

2024-01-09 09:23:12

指针C++
点赞
收藏

51CTO技术栈公众号