C++ 指针和数组

在本文中,您将了解数组与指针之间的关系,并在程序中有效地使用它们。

指针是保存地址的变量。指针不仅可以存储单个变量的地址,还可以存储数组单元的地址。

看以下示例:

int* ptr;
int a[5];
ptr = &a[2];  // &a[2]是a[5]的第三个元素的地址。

指向数组单元格的指针

假设指针需要指向数组的第四个元素,即在上述情况下的第四个数组元素的保存地址。

由于ptr指向上面示例中的第三个元素,ptr + 1将指向第四个元素。

您可能会认为,ptr +1为您提供了ptr的下一个字节的地址。 但这是不正确的。

这是因为指针ptr是指向int的指针,并且int的大小对于操作系统是固定的(64位操作系统中int类型大小是4字节)。 因此,ptr和ptr +1之间的地址相差4个字节。

如果指针ptr是指向char的指针,那么ptr和ptr + 1之间的地址将相差1个字节,因为一个字符的大小是1个字节。

示例1:C ++指针和数组

C ++程序使用数组和指针显示数组元素的地址

#include <iostream>
using namespace std;

int main()
{
    float arr[5];
    float *ptr;
    
    cout << "使用数组显示地址: " << endl;
    for (int i = 0; i < 5; ++i)
    {
        cout << "&arr[" << i << "] = " << &arr[i] << endl;
    }

    // ptr = &arr[0]
    ptr = arr;

    cout<<"\n使用指针显示地址: "<< endl;
    for (int i = 0; i < 5; ++i)
    {
        cout << "ptr + " << i << " = "<< ptr + i << endl;
    }

    return 0;
}

输出结果

使用数组显示地址:
&arr[0] = 0015F718
&arr[1] = 0015F71C
&arr[2] = 0015F720
&arr[3] = 0015F724
&arr[4] = 0015F728

使用指针显示地址:
ptr + 0 = 0015F718
ptr + 1 = 0015F71C
ptr + 2 = 0015F720
ptr + 3 = 0015F724
ptr + 4 = 0015F728

在上面的程序中,使用不同的指针ptr来显示数组元素arr的地址。

但是,数组元素可以通过使用相同的数组名arr来使用指针表示法来访问。例如:

int arr[3];

&arr[0] 等同于 arr
&arr[1] 等同于 arr + 1
&arr[2] 等同于 arr + 2

示例2:指针和数组

C ++程序使用指针符号显示数组元素的地址。

#include <iostream>
using namespace std;

int main() {
    float arr[5];
    
    cout<<"使用指针符号显示地址: "<< endl;
    for (int i = 0; i < 5; ++i) {
        cout << arr + i <<endl;
    }

    return 0;
}

输出结果

使用指针符号显示地址:
045FB90
045FB94
045FB98
045FB9C
045FBA0

您知道,指针ptr保存地址,而表达式*ptr给出存储在地址中的值。

类似地,可以使用*(ptr + 1)获取存储在指针ptr + 1中的值。

请考虑以下代码:

int ptr[5] = {3, 4, 5, 5, 3};
  • &ptr[0]等于ptr,*ptr等于ptr[0]

  • &ptr[1]等于ptr + 1,*(ptr + 1) 等于ptr[1]

  • &ptr[2]等于ptr + 2,*(ptr + 2)等于ptr[2]

  • &ptr[i]等于ptr + i ,*(ptr + i)等于ptr[i]

示例3:C ++指针和数组

C ++程序,用于插入和显示使用指针符号输入的数据。

#include <iostream>
using namespace std;

int main() {
    float arr[5];
    
   // 使用指针符号插入数据
    cout << "输入5个数字: ";
    for (int i = 0; i < 5; ++i) {
        cin >> *(arr + i) ;
    }

    // 使用指针符号显示数据
    cout << "显示数据: " << endl;
    for (int i = 0; i < 5; ++i) {
        cout << *(arr + i) << endl ;
    }

    return 0;
}

输出结果

输入5个数字: 125
145
180
225
335
显示数据:
125
145
180
225
335