要想了解指针调用,首先要了解指针:
学习 C++ 的指针既简单又有趣。通过指针,可以简化一些 C++ 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C++ 程序员,学习指针是很有必要的。
正如您所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。请看下面的实例,它将输出定义的变量地址:
- #include
- using namespace std;
- int main ()
- {
- int var1;
- char var2[10];
- cout << "var1 变量的地址: ";
- cout << &var1 << endl;
- cout << "var2 变量的地址: ";
- cout << &var2 << endl;
- return 0;
- }
当上面的代码被编译和执行时,它会产生下列结果:
var1 变量的地址: 0xbfebd5c0
var2 变量的地址: 0xbfebd5b6
通过上面的实例,我们了解了什么是内存地址以及如何访问它。接下来让我们看看什么是指针。
指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:
type *var-name;
在这里,type 是指针的基类型,它必须是一个有效的 C++ 数据类型,var-name 是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。但是,在这个语句中,星号是用来指定一个变量是指针。
向函数传递参数的指针调用方法,把参数的地址复制给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数
按指针传递值,参数指针被传递给函数,就像传递其他值给函数一样。因此相应地,在下面的函数 swap() 中,您需要声明函数参数为指针类型,该函数用于交换参数所指向的两个整数变量的值。
- // 函数定义
- void swap(int *x, int *y)
- {
- int temp;
- temp = *x; /* 保存地址 x 的值 */
- *x = *y; /* 把 y 赋值给 x */
- *y = temp; /* 把 x 赋值给 y */
-
- return;
- }
现在,让我们通过指针传值来调用函数 swap():
- #include
- using namespace std;
-
- // 函数声明
- void swap(int *x, int *y);
-
- int main ()
- {
- // 局部变量声明
- int a = 100;
- int b = 200;
-
- cout << "交换前,a 的值:" << a << endl;
- cout << "交换前,b 的值:" << b << endl;
-
- /* 调用函数来交换值
- * &a 表示指向 a 的指针,即变量 a 的地址
- * &b 表示指向 b 的指针,即变量 b 的地址
- */
- swap(&a, &b);
-
- cout << "交换后,a 的值:" << a << endl;
- cout << "交换后,b 的值:" << b << endl;
-
- return 0;
- }
当上面的代码被编译和执行时,它会产生下列结果:
交换前,a 的值: 100 交换前,b 的值: 200 交换后,a 的值: 200 交换后,b 的值: 100