电脑软硬件应用网
当前位置: 电脑软硬件应用网 > 设计学院 > 网络编程 > C语言 > 正文
C++中指针入门
C++中指针入门
2009-4-1 17:35:39  文/天涯   出处:中国自学编程网   

如果让指针指向数组元素中的下一个,可以用pArray++.也可以用你应该能想到的pArray + 1,都会让指针指向数组的下一个元素。要注意的是你在移动指针时,程序并不检查你是否已经移动地超出了你定义的数组,也就是说你很可能通过上面的简单指针加操作而访问到数组以外的数据,而结果就是,可能会使系统崩溃,所以请格外小心。

当然有了pArray + 1,也可以有pArray - 1,这种操作在循环中很常用,特别是while循环中。

另一个需要注意的是,如果你定义了一个指向整型数的指针:int*pNumberSet ,你可以把它当作是数组,如:pNumberSet[0] 和 *pNumberSet是相

等的,pNumberSet[1]与*(pNumberSet + 1)也是相等的。

在这一节的最后提一个警告:如果你用 new 动态地分配了一个数组,
int *pArray;
pArray = new int[6];

别忘了回收,

delete[] pArray;

这一句是告诉编译器是删除整个数组而不一个单独的元素。千万记住了。

后话

还有一点要小心,别删除一个根本就没分配内存的指针,典型的是如果没用new分配,就别用delete:

void main()
{
int number;
int *pNumber = number;

delete pNumber; // 错误 - *pNumber 没有用new动态分配内存.
}

常见问题解答

Q:为什么我在编译程序时老是在 new 和 delete语句中出现'symbolundefined' 错误?

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分配的内存操作中,而delete只用在用new分配的内存操作中。引用(写给某些有能力的读者)

这一节的内容不是我的这篇文章的中心,只是供某些有能力的读者参考。有些读者经常问我关于引用和指针的问题,这里我简要地讨论一下。在前面指针的学习中,我们知道(&)是读作“什么的地址”,但在下面的程序中,它是读作“什么的引用”

int& Number = myOtherNumber;
Number = 25;

引用有点像是一个指向myOtherNumber的指针,不同的是它是自动删除的。所以他比指针在某些场合更有用。与上面等价的代码是:

int* pNumber = &myOtherNumber;
*pNumber = 25;

指针与引用另一个不同是你不能修改你已经定义好的引用,也就是说你不能改变它在声明时所指的内容。举个例子:

int myFirstNumber = 25;
int mySecondNumber = 20;
int &myReference = myFirstNumber;

myReference = mySecondNumber;//这一步能使myReference 改变吗?

cout<<myFristNumber<<endl;//结果是20还是25?

当在类中操作时,引用的值必须在构造函数中设定,例:

CMyClass::CMyClass(int &variable) : m_MyReferenceInCMyClass(variable)
{
// constructor code here
}

总结

这篇文章开始可能会较难掌握,所以最好是多读几遍。有些读者暂时还不能理解,在这儿我再做一个简要的总结:

指针是一个指向内存区域的变量,定义时在变量名前加上星号(*)(如:int *number)。

你可以得到任何一个变量的地址,只在变量名前加上&(如:pNumber =&my_number)。

你可以用'new' 关键字动态分配内存。指针的类型必须与它所指的变量类型一样(如:int *number 就不能指向 MyClass)。

你可以传递一个指针到函数。必须用'delete'删除你动态分配的内存。

你可以用&array[0]而让指针指向一个数组。

你必须用delete[]而不是delete来删除动态分配的数组。

文章到这儿就差不多结束了,但这些并不就是指针所有的东西,像指向指针的指针等我还没有介绍,因为这些东西对于一个初学指针的人来说还太复杂了,我不能让读者一开始就被太复杂的东西而吓走了。好了,到这儿吧,试着运行我上面写的小程序,也多自己写写程序,你肯定会进步不小的!

上一页  [1] [2] [3] 

  • 上一篇文章:

  • 下一篇文章:
  • 最新热点 最新推荐 相关文章
    用C语言实现的闹钟程序
    C#实现Windows关机的代码
    用动态规划法求组和数的算法
    循环结构程序具有哪3个组成部分?
    const成员函数有什么特点?
    c语言求平均分程序
    一道关于指针的C语言题
    C语言求3个整数的最大公约数
    BM模式匹配算法C语言实现
    从键盘输入任意5个4位整数存入数组a…
    关于45IT | About 45IT | 联系方式 | 版权声明 | 网站导航 |

    Copyright © 2003-2011 45IT. All Rights Reserved 浙ICP备09049068号