如何掌握C 指针基础
创始人
2024-06-22 05:10:23
0

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

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

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

  1. #include  
  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<;  
  12. // 现在通过指针改变nNumber的值:  
  13. *pPointer = 25;  
  14. //证明nNumber已经被上面的程序改变  
  15. //重新打印出nNumber的值:   
  16. cout<<"nNumber is equal to :"<;   

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

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

  1. #include  
  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<;  
  12. // 现在通过指针改变nNumber的值:  
  13. *pPointer = 25;  
  14. //证明nNumber已经被上面的程序改变  
  15. //重新打印出nNumber的值:   
  16. cout<<"nNumber is equal to :"<;   

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

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

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

【编辑推荐】

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

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...