C++ 指针 vs 数组
2018-03-18 20:38
169 查看
指针和数组是密切相关的。事实上,指针和数组在很多情况下是可以互换的。例如,一个指向数组开头的指针,可以通过使用指针的算术运算或数组索引来访问数组。请看下面的程序:
当上面的代码被编译和执行时,它会产生下列结果:
然而,指针和数组并不是完全互换的。例如,请看下面的程序:
把指针运算符 * 应用到 var 上是完全可以的,但修改 var 的值是非法的。这是因为 var 是一个指向数组开头的常量,不能作为左值。
由于一个数组名对应一个指针常量,只要不改变数组的值,仍然可以用指针形式的表达式。例如,下面是一个有效的语句,把 var[2] 赋值为 500:
上面的语句是有效的,且能成功编译,因为 var 未改变。
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // 指针中的数组地址 ptr = var; for (int i = 0; i < MAX; i++) { cout << "var[" << i << "]的内存地址为 "; cout << ptr << endl; cout << "var[" << i << "] 的值为 "; cout << *ptr << endl; // 移动到下一个位置 ptr++; } return 0; }
当上面的代码被编译和执行时,它会产生下列结果:
var[0]的内存地址为 0x7fff59707adc var[0] 的值为 10 var[1]的内存地址为 0x7fff59707ae0 var[1] 的值为 100 var[2]的内存地址为 0x7fff59707ae4 var[2] 的值为 200
然而,指针和数组并不是完全互换的。例如,请看下面的程序:
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; for (int i = 0; i < MAX; i++) { *var = i; // 这是正确的语法 var++; // 这是不正确的 } return 0; }
把指针运算符 * 应用到 var 上是完全可以的,但修改 var 的值是非法的。这是因为 var 是一个指向数组开头的常量,不能作为左值。
由于一个数组名对应一个指针常量,只要不改变数组的值,仍然可以用指针形式的表达式。例如,下面是一个有效的语句,把 var[2] 赋值为 500:
*(var + 2) = 500;
上面的语句是有效的,且能成功编译,因为 var 未改变。
相关文章推荐
- C++ 内存管理之五(数组 vs 指针)
- C++ 内存管理之五(数组 vs 指针)
- 【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明
- C++ -- 数组 vs 指针
- C++ 内存管理之五(数组 vs 指针)
- c++ 基础 指针访问数组两种方法 下标法 指针法
- c++ 数组,变量,指针,引用, 初始化,赋值
- c/c++指针和数组
- C/C++指针与数组
- C# vs C++之一:委托 vs 函数指针
- 浅谈C++字符数组与字符串指针
- 数组元素的指针 vs 数组的指针
- VS调试时把指向数组的指针按照数组方式查看
- [推荐] 数组与指针的艺术--深入探索c/c++数组与指针的奥秘
- VS_C_17/12/17 C的数组的扩充与指针的引入
- c/c++ 数组和指针的一些不同之处
- 数组与指针的艺术--深入探索c/c++数组与指针的奥秘
- C++之对象数组和对象指针
- C++中引用,指针和数组的比较
- C++中数组名、指针的引用传递