C++ 指针的学习既简单又有趣。一些 C++ 任务使用指针更加容易完成,而其他任务,如动态内存分配,没有它们就无法实现。
正如你所知,每一个变量都是一个内存位置,每一个内存位置都有其定义的地址,可以通过使用取址运算符 &
来访问。下面是一个示例,它将打印出已定义变量的地址:
示例
#include <iostream>
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 是指针变量的名称。你用来声明指针的星号(*)与用来表示乘法的星号相同。然而,在这个声明中,星号用来标记一个变量是指针。以下是有效的指针声明:
int *ip;
double *dp;
float *fp;
char *ch;
所有指针的实际数据类型,无论是整型、浮点型、字符型或其他类型,都是相同的,一个长的十六进制数字代表一个内存地址。不同数据类型的指针之间的唯一区别是指针所指向的变量或常量的数据类型。
C++ 中的指针使用
有几个重要的操作我们会频繁地与指针一起使用。(a)我们定义一个指针变量。(b)将一个变量的地址赋给一个指针。(c)最后访问指针变量中可用地址上的值。这是通过使用单目运算符 * 来完成的,该运算符返回其操作数所指定地址处的变量的值。以下示例使用了这些操作:
示例
#include <iostream>
using namespace std;
int main () {
int var = 20;
int *ip;
ip = &var;
cout << "var 变量的值: ";
cout << var << endl;
cout << "存储在 ip 变量中的地址: ";
cout << ip << endl;
cout << "*ip 变量的值: ";
cout << *ip << endl;
return 0;
}
当以上代码被编译和执行时,它产生的结果如下:
var 变量的值: 20
存储在 ip 变量中的地址: 0xbfc601ac
*ip 变量的值: 20
C++ 指针
指针有许多但容易理解的概念,并且它们对于 C++ 编程非常重要。以下是 C++ 程序员应该清楚的一些重要指针概念:
序号 |
概念 & 描述 |
1 |
空指针 |
2 |
指针算术 |
3 |
指针与数组 |
4 |
指针数组 |
5 |
指向指针的指针 |
6 |
向函数传递指针 |
7 |
从函数返回指针 |