- C++ 基础
- C++ 首页
- C++ 概述
- C++ 环境搭建
- C++ 基本语法
- C++ 注释
- C++ Hello World
- C++ 省略命名空间
- C++ 常量/字面量
- C++ 关键字
- C++ 标识符
- C++ 数据类型
- C++ 数值数据类型
- C++ 字符数据类型
- C++ 布尔数据类型
- C++ 变量类型
- C++ 变量作用域
- C++ 多个变量
- C++ 基本输入/输出
- C++ 修饰符类型
- C++ 存储类
- C++ 运算符
- C++ 数字
- C++ 枚举
- C++ 引用
- C++ 日期和时间
- C++ 控制语句
- C++ 决策
- C++ if 语句
- C++ if else 语句
- C++ 嵌套 if 语句
- C++ switch 语句
- C++ 嵌套 switch 语句
- C++ 循环类型
- C++ while 循环
- C++ for 循环
- C++ do while 循环
- C++ foreach 循环
- C++ 嵌套循环
- C++ break 语句
- C++ continue 语句
- C++ goto 语句
- C++ 构造函数
- C++ 构造函数和析构函数
- C++ 复制构造函数
C++ 指针运算
正如您所了解的,指针是一个地址,它是一个数值;因此,您可以对指针执行算术运算,就像对数值执行算术运算一样。有四个算术运算符可以用于指针:++、--、+ 和 -
为了理解指针运算,让我们考虑一下ptr是一个指向地址 1000 的整数指针。假设 32 位整数,让我们对指针执行以下算术运算 -
ptr++
ptr 将指向地址 1004,因为每次 ptr 增加时,它将指向下一个整数。此操作将指针移动到下一个内存位置,而不会影响内存位置的实际值。如果 ptr 指向地址为 1000 的字符,则上述操作将指向地址 1001,因为下一个字符将在 1001 处可用。
递增指针
我们更倾向于在程序中使用指针而不是数组,因为变量指针可以递增,而数组名称不能递增,因为它是一个常量指针。以下程序递增变量指针以访问数组的每个后续元素 -
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // let us have array address in pointer. ptr = var; for (int i = 0; i < MAX; i++) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // point to the next location ptr++; } return 0; }
当以上代码编译并执行时,会产生如下结果 -
Address of var[0] = 0xbfa088b0 Value of var[0] = 10 Address of var[1] = 0xbfa088b4 Value of var[1] = 100 Address of var[2] = 0xbfa088b8 Value of var[2] = 200
递减指针
相同的考虑适用于递减指针,它会将其值减少其数据类型的字节数,如下所示 -
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // let us have address of the last element in pointer. ptr = &var[MAX-1]; for (int i = MAX; i > 0; i--) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // point to the previous location ptr--; } return 0; }
当以上代码编译并执行时,会产生如下结果 -
Address of var[3] = 0xbfdb70f8 Value of var[3] = 200 Address of var[2] = 0xbfdb70f4 Value of var[2] = 100 Address of var[1] = 0xbfdb70f0 Value of var[1] = 10
指针比较
可以使用关系运算符(如 ==、< 和 >)来比较指针。如果 p1 和 p2 指向彼此相关的变量,例如同一数组的元素,则可以有意义地比较 p1 和 p2。
以下程序修改了前面的示例,通过递增变量指针来实现,只要它指向的地址小于或等于数组最后一个元素的地址,即 &var[MAX - 1] -
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // let us have address of the first element in pointer. ptr = var; int i = 0; while ( ptr <= &var[MAX - 1] ) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // point to the previous location ptr++; i++; } return 0; }
当以上代码编译并执行时,会产生如下结果 -
Address of var[0] = 0xbfce42d0 Value of var[0] = 10 Address of var[1] = 0xbfce42d4 Value of var[1] = 100 Address of var[2] = 0xbfce42d8 Value of var[2] = 200
cpp_pointers.htm
广告