zltzlt 发表于 2020-1-14 17:16:55

C++ 指针 <--> 数组

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:

#include <iostream>
using namespace std;

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

方法 2:

#include <iostream>
using namespace std;

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

方法 3:

#include <iostream>
using namespace std;

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

方法 4:

#include <iostream>
using namespace std;

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

方法 5:

#include <iostream>
using namespace std;

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

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

指针和数组的区别

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

在定义数组时为数组的各个元素分配了全部的存储区,而在定义指针时,仅仅分配四个字节的存储区存放指针地址。
页: [1]
查看完整版本: C++ 指针 <--> 数组