#include void AddFive(int Number) { Number = Number + 5; } void main() { int nMyNumber =18; cout<<"My original number is "<; AddFive(nMyNumber); cout<<"My new number is "<; //得到了结果23吗?问题出在哪儿? }
问题出在函数AddFive里用到的Number是变量nMyNumber的一个副本而传递给函数,而不是变量本身。因此, " Number =
Number + 5" 这一行是把变量的副本加了5,而原始的变量在主函数main()里依然没变。试着运行这个程序,自己去体会一下。
要解决这个问题,我们就要传递一个指针到函数,所以我们要修改一下函数让它能接受指针:把'void AddFive(int Number)' 改成
'void AddFive(int* Number)' 。下面就是改过的程序,注意函数调用时要用&号,以表示传递的是指针:
#include void AddFive(int* Number) { *Number = *Number + 5; } void main() { int nMyNumber =18; cout<<"My original number is "<; AddFive(&nMyNumber); cout<<"My new number is "<; }
试着自己去运行它,注意在函数AddFive的参数Number前加*号的重要性:它告诉编译器,我们是把指针所指的变量加5。而不并指针自己加5。 最后,如果想让函数返回指针的话,你可以这么写: int * MyFunction(); 在这句里,MyFunction返回一个指向整型的指针。 指向类的指针 指针在类中的操作要格外小心,你可以用如下的办法定义一个类:
class MyClass { public: int m_Number; char m_Character; };
class MyClass { public: int m_Number; char m_Character; }; void main() { MyClass *pPointer; pPointer = new MyClass; pPointer->m_Number =10; pPointer->m_Character = 's'; delete pPointer; }
指向数组的指针 你也可以让指针指向一个数组,按下面的方法操作: int *pArray; pArray = new int[6]; 程序会创建一个指针pArray,让它指向一个有六个元素的数组。另外一种方法,不用动态分配: int *pArray; int MyArray[6]; pArray = &MyArray[0];
注意,&MyArray[0] 也可以简写成 MyArray ,都表示是数组的第一个元素地址。但如果写成pArray = &
MyArray可能就会出问题,结果是 pArray 指向的是指向数组的指针(在一维数组中尽管与&MyArray[0]相等),而不是你想要
的,在多维数组中很容易出错。 在数组中使用指针 一旦你定义了一个指向数组的指针,你该怎样使用它呢?让我们来看一个例子,一个指向整型数组的指针:
#include void main() { int Array[3]; Array[0]=10; Array[1]=20; Array[2]=30; int *pArray; pArray = &Array[0]; cout<<"pArray points to the value %d\n"<<*pArray<; }