小白教程
所有教程
关于
Search
172.70.126.168
172.70.126.168
参数设置
贡献
退出
操作
编辑
移动
保护
信息
历史
删除
查看“Cpp pointers vs arrays”的源代码
本页内容
上一节:
Cpp_pointer_arithmetic
下一节:
Cpp_array_of_pointers
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{DISPLAYTITLE:C++ 指针 vs 数组}}[[Category:cpp pointers|3]] = C++ 指针 vs 数组 = [[cpp pointers|C++ 指针]] 指针和数组是密切相关的。事实上,指针和数组在很多情况下是可以互换的。例如,一个指向数组开头的指针,可以通过使用指针的算术运算或数组索引来访问数组。请看下面的程序: <sample title="" desc="" lang="c" hererun="1"> #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; } </sample> 当上面的代码被编译和执行时,它会产生下列结果: <pre> var[0]的内存地址为 0x7fff59707adc var[0] 的值为 10 var[1]的内存地址为 0x7fff59707ae0 var[1] 的值为 100 var[2]的内存地址为 0x7fff59707ae4 var[2] 的值为 200 </pre> 然而,指针和数组并不是完全互换的。例如,请看下面的程序: <sample title="" desc="" lang="c" hererun="1"> #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; } </sample> 把指针运算符 * 应用到 var 上是完全可以的,但修改 var 的值是非法的。这是因为 var 是一个指向数组开头的常量,不能作为左值。 由于一个数组名对应一个指针常量,只要不改变数组的值,仍然可以用指针形式的表达式。例如,下面是一个有效的语句,把 var[2] 赋值为 500: <pre> *(var + 2) = 500; </pre> 上面的语句是有效的,且能成功编译,因为 var 未改变。 [[cpp pointers|C++ 指针]]
返回至“
Cpp pointers vs arrays
”。
上一节:
Cpp_pointer_arithmetic
下一节:
Cpp_array_of_pointers