鱼C论坛

 找回密码
 立即注册
查看: 1492|回复: 0

[技术交流] C++ 指针 <--> 数组

[复制链接]
发表于 2020-1-14 17:16:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
C++ 指针 <--> 数组


C++ 中,指针和数组关系密切,几乎可以互换使用。

数组名可以看成常量指针,对于一维数组,数组名是数组的起始地址,也就是第 0 个元素的地址。

假设有指针 p 和数组 a,如果执行了 p = a,则指针 p 和数组 a 是等价的,可以用 p 访问数组 a 的任何元素。

指针运算

指针保存的是一个地址,地址是一个整型数,因此可以对指针进行算术运算,但仅有加减运算是有意义的。

指针的加减运算与数组有密切的关系。

  • 指针 + 1 (p + 1)表示数组中指针指向元素的下一个元素的地址。
  • 指针 - 1 (p - 1)表示数组中指针指向元素的上一个元素的地址。
  • 第 i 个元素的地址可表示为 p + i,第 i 个元素的值可表示为 *(p + i)。


例如,输出数组 a 的前十个元素。

方法 1:

  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.     int *p, a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, i;
  6.     for (i = 0; i < 10; i++)
  7.         cout << a[i] << " ";
  8.     return 0;
  9. }
复制代码


方法 2:

  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.     int *p, a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, i;
  6.     for (i = 0; i < 10; i++)
  7.         cout << *(a + i) << " ";
  8.     return 0;
  9. }
复制代码


方法 3:

  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.     int *p, a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  6.     for (p = a; p < a + 10; p++)
  7.         cout << *p << " ";
  8.     return 0;
  9. }
复制代码


方法 4:

  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.     int *p, a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, i;
  6.     for (p = a, i = 0; i < 10; i++)
  7.         cout << *(p + i) << " ";
  8.     return 0;
  9. }
复制代码


方法 5:

  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.     int *p, a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, i;
  6.     for (p = a, i = 0; i < 10; i++)
  7.         cout << p[i] << " ";
  8.     return 0;
  9. }
复制代码


执行结果均为 1 2 3 4 5 6 7 8 9 10

指针和数组的区别

虽然通过指针可以访问数组,但两者本质确实不同的。

在定义数组时为数组的各个元素分配了全部的存储区,而在定义指针时,仅仅分配四个字节的存储区存放指针地址。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-5 17:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表