c++指针基础入门

上传人:xzh****18 文档编号:42113725 上传时间:2018-06-01 格式:DOC 页数:9 大小:59KB
返回 下载 相关 举报
c++指针基础入门_第1页
第1页 / 共9页
c++指针基础入门_第2页
第2页 / 共9页
c++指针基础入门_第3页
第3页 / 共9页
c++指针基础入门_第4页
第4页 / 共9页
c++指针基础入门_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《c++指针基础入门》由会员分享,可在线阅读,更多相关《c++指针基础入门(9页珍藏版)》请在金锄头文库上搜索。

1、1C+指针基础入门指针基础入门什么是指针?什么是指针?其实指针就像是其它变量一样,所不同的是一般的变量包含的是实际的真 实的数据,而指针是一个指示器,它告诉程序在内存的哪块区域可以找到数据。 这是一个非常重要的概念,有很多程序和算法都是围绕指针而设计的,如链表。开始学习开始学习如何定义一个指针呢?就像你定义一个其它变量一样,只不过你要在指针 名字前加上一个星号。我们来看一个例子:下面这个程序定义了两个指针,它 们都是指向整型数据。int* pNumberOne;int* pNumberTwo;你注意到在两个变量名前的“p”前缀了吗?这是程序员通常在定义指针时 的一个习惯,以提高便程序的阅读性,

2、表示这是个指针。现在让我们来初始化 这两个指针:pNumberOne = pNumberTwo = int *pPointer; / 现在给它们赋值: nNumber = 15; pPointer = /打印出变量 nNumber 的值: coutint *pPointer;void SomeFunction();int nNumber;nNumber = 25; /让指针指向 nNumber:pPointer = void main() SomeFunction(); /为 pPointer 赋值/为什么这里失败了?为什么没有得到 25coutint *pPointer;void SomeF

3、unction() / 让指针指向一个新的整型pPointer = new int;*pPointer = 25;void main() SomeFunction(); / 为 pPointer 赋值coutint *pPointer;void SomeFunction() / 让指针指向一个新的整型pPointer = new int;*pPointer = 25;void main() SomeFunction(); /为 pPointer 赋值coutvoid AddFive(int Number)Number = Number + 5;5void main()int nMyNumber

4、 = 18;coutvoid AddFive(int* Number)*Number = *Number + 5;void main()int nMyNumber = 18;cout ,来看下面的例子:class MyClasspublic:int m_Number;char m_Character;void main()MyClass *pPointer;pPointer = new MyClass;pPointer-m_Number = 10;pPointer-m_Character = s;delete pPointer;指向数组的指针指向数组的指针你也可以让指针指向一个数组,按下面的方

5、法操作:int *pArray;pArray = new int6;程序会创建一个指针 pArray,让它指向一个有六个元素的数组。另外一种 方法,不用动态分配:int *pArray;int MyArray6;pArray = 7注意,Array0 = 10;Array1 = 20;Array2 = 30;int *pArray;pArray = cout“pArray points to the value %dn“*pArrayendl;如果让指针指向数组元素中的下一个,可以用 pArray+.也可以用你应该 能想到的 pArray + 1,都会让指针指向数组的下一个元素。要注意的是你在

6、移 动指针时,程序并不检查你是否已经移动地超出了你定义的数组,也就是说你 很可能通过上面的简单指针加操作而访问到数组以外的数据,而结果就是,可 能会使系统崩溃,所以请格外小心。当然有了 pArray + 1,也可以有 pArray 1,这种操作在循环中很常用, 特别是 while 循环中。另一个需要注意的是,如果你定义了一个指向整型数的指针:int* pNumberSet ,你可以把它当作是数组,如:pNumberSet0 和 *pNumberSet 是相等的,pNumberSet1与*(pNumberSet + 1)也是相等的。在这一节的最后提一个警告:如果你用 new 动态地分配了一个数组

7、,int *pArray;pArray = new int6;别忘了回收,delete pArray;8这一句是告诉编译器是删除整个数组而不一个单独的元素。千万记住了。后话后话这一句是告诉编译器是删除整个数组而不一个单独的元素。千万记住了。 还有一点要小心,别删除一个根本就没分配内存的指针,典型的是如果没用 new 分配,就别用 delete:void main()int number;int *pNumber = number;delete pNumber; / 错误 - *pNumber 没有用 new 动态分配内存.常见问题解答 Q:为什么我在编译程序时老是在 new 和 delete

8、语句中出 现symbol undefined 错误?A:new 和 delete 都是 C+在 C 上的扩展,这个错误是说编译器认为你现 在的程序是 C 而不 C+,当然会出错了。看看你的文件名是不是。cpp 结尾。Q:new 和 malloc 有什么不同?A:new 是 C+中的关健字,用来分配内存的一个标准函数。如果没有必要, 请不要在 C+中使用 malloc.因为 malloc 是 C 中的语法,它不是为面向对象的 C+而设计的。Q:我可以同时使用 free 和 delete 吗?A:你应该注意的是,它们各自所匹配的操作不同。free 只用在用 malloc 分配的内存操作中,而 de

9、lete 只用在用 new 分配的内存操作中。引用(写给某些有能力的读者)这一节的内容不是我的这篇文章的中心,只是供某些有能力的读者参考。有些读者经常问我关于引用和指针的问题,这里我简要地讨论一下。在前面指针的学习中,我们知道()是读作“什么的地址”,但在下面 的程序中,它是读作“什么的引用”intNumber = 25;9引用有点像是一个指向 myOtherNumber 的指针,不同的是它是自动删除的。 所以他比指针在某些场合更有用。与上面等价的代码是:int* pNumber = *pNumber = 25;指针与引用另一个不同是你不能修改你已经定义好的引用,也就是说你不 能改变它在声明时

10、所指的内容。举个例子:int myFirstNumber = 25; int mySecondNumber = 20; int myReference = mySecondNumber;/这一步能使 myReference 改变吗? coutmyFristNumberendl;/结果是 20 还是 25?当在类中操作时,引用的值必须在构造函数中设定,例: CMyClass:CMyClass(int &variable) : m_MyReferenceInCMyClass(variable) / constructor code here 总结总结这篇文章开始可能会较难掌握,所以最好是多读几遍。

11、有些读者暂时还不 能理解,在这儿我再做一个简要的总结:指针是一个指向内存区域的变量,定 义时在变量名前加上星号(*)(如:int *number)。你可以得到任何一个变量的地址,只在变量名前加上(如:pNumber = &my_number)。你可以用new 关键字动态分配内存。指针的类型必须与它所指的变量类 型一样(如:int *number 就不能指向 MyClass)。你可以传递一个指针到函数。必须用delete删除你动态分配的内存。你可以用&array0而让指针指向一个数组。你必须用 delete而不是 delete 来删除动态分配的数组。文章到这儿就差不多结束了,但这些并不就是指针所有的东西,像指向指 针的指针等我还没有介绍,因为这些东西对于一个初学指针的人来说还太复杂 了,我不能让读者一开始就被太复杂的东西而吓走了。好了,到这儿吧,试着 运行我上面写的小程序,也多自己写写程序,你肯定会进步不小的!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号