English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ Punteros y arreglos

En este artículo, aprenderá la relación entre los arrays y los punteros y utilizarlos de manera efectiva en el programa.

指针es la variable que almacena la dirección de almacenamiento. El puntero no solo puede almacenar la dirección de una variable individual, sino tambiénEl arrayLa dirección de la unidad.

Vea el siguiente ejemplo:

int* ptr;
int a[5];
ptr = &a[2];  // &a[2] es a[5La dirección del tercer elemento.]

Supongamos que el puntero necesita apuntar al cuarto elemento del array, es decir, la dirección de almacenamiento del cuarto elemento del array en el caso anterior.

Dado que ptr apunta al tercer elemento del ejemplo anterior, ptr + 1Se apuntará al cuarto elemento.

Puede pensar que ptr +1le ha proporcionado la dirección del siguiente byte de ptr. Pero esto es incorrecto.

porque el puntero ptr es un puntero de int y el tamaño de int es fijo para el sistema operativo (64el tamaño del tipo int en el sistema de operaciones bit es4bytes). Por lo tanto, ptr y ptr +1es4bytes.

Si el puntero ptr es un puntero de char, entonces la diferencia entre las direcciones de ptr y ptr + 1las direcciones entre1bytes, ya que el tamaño de un carácter es1bytes.

Ejemplo1: C ++Punteros y arreglos

C ++El programa muestra las direcciones de los elementos del array con arreglos y punteros

#include <iostream>
using namespace std;
int main()
{
    float arr[5];
    float *ptr;
    
    cout << "mostrar direcciones con el array: " << endl;
    for (int i = 0; i < 5; ++i)
    {
        cout << "&arr[" << i << "] = " << &arr[i] << endl;
    }
    // ptr = &arr[0]
    ptr = arr;
    cout << "\nmostrar direcciones con el puntero: " << endl;
    for (int i = 0; i < 5; ++i)
    {
        cout << "ptr + " << i << " = " << ptr + i << endl;
    }
    return 0;
}

输出结果

mostrar direcciones con el array:
&arr[0] = 0015F718
&arr[1] = 0015F71C
&arr[2] = 0015F720
&arr[3] = 0015F724
&arr[4] = 0015F728
mostrar direcciones con el puntero:
ptr + 0 = 0015F718
ptr + 1 = 0015F71C
ptr + 2 = 0015F720
ptr + 3 = 0015F724
ptr + 4 = 0015F728

En el programa anterior, se muestra la dirección de los elementos del array arr con diferentes punteros ptr.

Pero, los elementos del array se pueden acceder usando la notación de puntero con el mismo nombre del array arr. Por ejemplo:

int arr[3];
&arr[0] equivalente a arr
&arr[1] equivalente a arr + 1
&arr[2] equivalente a arr + 2

Ejemplo2: Punteros y arreglos

C ++El programa muestra las direcciones de los elementos del array con el símbolo de puntero.

#include <iostream>
using namespace std;
int main() {
    float arr[5];
    
    cout << "mostrar direcciones con el símbolo de puntero: " << endl;
    for (int i = 0; i < 5; ++i) {
        cout << arr + i << endl;
    }
    return 0;
}

输出结果

mostrar direcciones con el símbolo de puntero:
045FB90
045FB94
045FB98
045FB9C
045FBA0

Sabe que el puntero ptr guarda la dirección, mientras que la expresión*ptr para obtener el valor almacenado en la dirección.

Del mismo modo, se puede usar*(ptr + 1) obtener el valor almacenado en el puntero ptr + 1los valores.

Considere el siguiente código:

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

  • &ptr[1] igual a ptr + 1,*(ptr + 1) igual a ptr[1]

  • &ptr[2] igual a ptr + 2,*(ptr + 2) igual a ptr[2]

  • &ptr[i] igual a ptr + i ,*(ptr + i) igual a ptr[i]

Ejemplo3: C ++Punteros y arreglos

C ++un programa para insertar y mostrar datos ingresados con el símbolo de puntero.

#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