C++ 指针



C++ 指针易于学习且趣味十足。一些 C++ 任务使用指针更容易完成,而其他 C++ 任务(例如动态内存分配)则无法在没有指针的情况下完成。

如你所知,每个变量都是一个内存位置,每个内存位置都有其定义的地址,可以使用地址符 (&) 运算符访问,该运算符表示内存中的地址。考虑以下内容,它将打印已定义变量的地址:

#include <iostream>

using namespace std;
int main () {
   int  var1;
   char var2[10];

   cout << "Address of var1 variable: ";
   cout << &var1 << endl;

   cout << "Address of var2 variable: ";
   cout << &var2 << endl;

   return 0;
}

编译并执行上述代码后,将产生以下结果:

Address of var1 variable: 0xbfebd5c0
Address of var2 variable: 0xbfebd5b6

什么是指针?

指针是一个变量,其值是另一个变量的地址。像任何变量或常量一样,您必须在使用指针之前声明它。指针变量声明的一般形式为:

type *var-name;

这里,type 是指针的基本类型;它必须是有效的 C++ 类型,而 var-name 是指针变量的名称。用于声明指针的星号与用于乘法的星号相同。但是,在此语句中,星号用于将变量指定为指针。以下是有效的指针声明:

int    *ip;    // pointer to an integer
double *dp;    // pointer to a double
float  *fp;    // pointer to a float
char   *ch     // pointer to character

所有指针的实际数据类型,无论是整数、浮点数、字符还是其他类型,都是相同的,一个表示内存地址的长十六进制数。不同数据类型指针之间的唯一区别在于指针指向的变量或常量的类型。

在 C++ 中使用指针

有一些重要的操作,我们将非常频繁地对指针执行这些操作。(a) 我们定义一个指针变量。(b) 将变量的地址赋给指针。(c) 最后访问指针变量中可用地址处的值。这是通过使用一元运算符 * 来完成的,它返回位于其操作数指定的地址处的变量的值。下面的示例使用了这些操作:

#include <iostream>

using namespace std;

int main () {
   int  var = 20;   // actual variable declaration.
   int  *ip;        // pointer variable 

   ip = &var;       // store address of var in pointer variable

   cout << "Value of var variable: ";
   cout << var << endl;

   // print the address stored in ip pointer variable
   cout << "Address stored in ip variable: ";
   cout << ip << endl;

   // access the value at the address available in pointer
   cout << "Value of *ip variable: ";
   cout << *ip << endl;

   return 0;
}

编译并执行上述代码后,将产生如下所示的结果:

Value of var variable: 20
Address stored in ip variable: 0xbfc601ac
Value of *ip variable: 20

C++ 中的指针

指针有很多但简单的概念,它们对 C++ 编程非常重要。C++ 程序员应该清楚以下几个重要的指针概念:

序号 概念和描述
1 空指针

C++ 支持空指针,它是一个值为零的常量,在多个标准库中定义。

2 指针算术

有四个算术运算符可用于指针:++,--,+,-

3 指针与数组

指针和数组之间存在密切关系。

4 指针数组

您可以定义数组来保存多个指针。

5 指向指针的指针

C++ 允许您拥有指向指针的指针,依此类推。

6 将指针传递给函数

通过引用或通过地址传递参数都可以使被调用函数在调用函数中更改传递的参数。

7 从函数返回指针

C++ 允许函数返回指向局部变量、静态变量和动态分配内存的指针。

广告