C++数组指针(指向数组的指针)详解 数组指针就是指向数组的指针。 数组是同类型数据的集合,集合中的素按照顺序在内存中连续排列。用指针指向数组其实就是让指针指向这段连续内存的首地址,也就是数组中第一个素(下标为 0)的地址。 借助数组指针,程序员可以通过内存地址直接访问和操作数组,为内存管理提供了更高的灵活性和效率。 数组指针的定义 定义一个指向数组的指针变量与定义普通指针没有什么不同,即定义一个跟数组素类型相同的指针即可,语法如下: 类型标识符 *指针名; 例如,在下面的代码中就分别定义了两个指针,并指向同一个数组: int num[10]; // 定义一个整形数组 int *p; // 定义一个与数组素类型相同的指针 p = &num[0]; // 令指针指向数组的首个素 int *q = &num[0]; // 初始化指针,令其指向数组的首个素 除此之外,也可以直接将数组名赋值给指针。在大多数情况下,数组名代表的就是数组的首地址。 因此,定义一个数组指针可以使用如下的代码: int num[10]; // 定义一个整形数组 int *p; // 定义一个与数组素类型相同的指针 p = num; // 令指针指向一个数组 int *q = num; // 初始化指针,令其指向一个数组 数组指针的使用 数组是一段连续的内存,而指针又可以通过加减整数进行移动,因此可以通过数组指针访问数组中的素。 用指针访问数组,和用下标访问数组的效果是一样的。 例如,一个指向数组 arr 的指针 p,访问第 i+1 个素(下标为 i),可以用 *(p+i),也可以用 arr[i],这两种方法是等价的。由于数组名代表的是数组的首地址,所以也可以用*(arr+i)来访问第 i+1 个素。 #include <iostream> int main() { int arr[5] = { 1,2,3,4,5 }; int* p = arr; std::cout << “*(p+2)=” << *(p + 2) << std::endl; std::cout << “arr[2]=” << arr[2] << std::endl; std::cout << “*(arr+2)=” << *(arr + 2) << std::endl; return 0; } 运行结果为: *(p+2)=3 arr[2]=3 *(arr+2)=3 注意,使用指针访问数组时不要越界,即确保移动后的指针仍指向的是数组中的某个素,超出数组的范围将导致程序异常甚至崩溃。 在如下的 C++ 程序中,借助数组指针实现数组素的反转。 #include <iostream> int main() { int array[5] = { 1, 2, 3, 4, 5 }; int *arrayPtr = array; // 初始化数组指针 std::cout << “原始数组: “; for (int i = 0; i < 5; i++) { std::cout << array[i] << ” “; } std::cout << std::endl; int* p = array; // 指向数组第一个素的指针 int* q = p + (sizeof(array) / sizeof(int)) – 1; //指向数组最后一个素的指针 //两个指针相遇则终止循环 while (p < q) { //交换两个指针指向的素 int t = *p; *p = *q; *q = t; p++; // p 指针向后移动 q–; // q 指针向前移动 } std::cout << “反转后的数组: “; for (int i = 0; i < 5; i++) { std::cout << array[i] << ” “; } std::cout << std::endl; return 0; } 运行结果为: 原始数组: 1 2 3 4 5 反转后的数组: 5 4 3 2 1 在上面的程序中,分别对两个指针施行自加和自减操作,从而实现指针的移动。并且前指针往后移,后指针往前移,两个指针指向的数据正好是需要交换的两个素。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/23620.html