Aritmética de punteros de C++

Aritmetica De Punteros De C



Este artículo trata sobre la aritmética de punteros en C++. Los punteros son variables que almacenan la dirección de memoria de los datos. La aritmética de punteros es una poderosa seña de identidad en el mundo del lenguaje de programación C++ que nos permite abordar diferentes operaciones aritméticas en las que la suma, multiplicación, división, incremento, decremento y resta implican un puntero para desarrollar la nueva dirección de memoria en nuestros buffers de memoria. . Una aritmética de punteros crea fácilmente la asignación de memoria dinámica. En este artículo de C++, aprenderemos cómo manipular la dirección de memoria de diferentes maneras con la ayuda de punteros y proporcionaremos pautas y ejemplos adecuados.

Escenario 1: el puntero realiza las operaciones de incremento y decremento

Aquí, aprenderemos sobre la manipulación del puntero para producir diferentes direcciones de memoria que tienen diferentes propósitos. Los punteros incrementales y decrementales también son punteros aritméticos de apalancamiento que aumentan o disminuyen la dirección en un factor de uno multiplicado por el tamaño del tipo de datos al que apuntan. El fragmento de código relacionado con este escenario se adjunta a continuación:







#incluir
usando el espacio de nombres estándar;
constante int Arr_Max = 5 ;
ent principal ( ) {
int donde [ Arr_Max ] = { 20 , 150 , 270 } ;
En t * ptr; // declarar puntero
ptr = var;
    para ( int yo = 0 ; i < Arr_Max; yo ++ ) {
std::cout << 'La dirección de memoria del elemento es: [' << i << '] = ' ;
std::cout << ptr << fin;
corte << 'El valor de la dirección es [' << i << '] = ' ;
corte << * ptr << fin;
std::cout << 'el puntero se incrementó correctamente' << fin;
ptr++;
    }
std::cout << 'Dirección del puntero antes del decremento' << ptr << fin;
ptr--;
std::cout << 'Dirección del puntero después de la disminución' << ptr << fin;
    devolver 0 ;
}

 
Aquí, definimos una biblioteca requerida en el código desde el principio: “ ”. Definimos una asignación de memoria para reservar el espacio en la memoria que es 'Arr_Max=5'. En la función principal, inicializamos la matriz y le pasamos el tamaño de la memoria a esa matriz. A continuación, también se necesita la declaración del puntero 'ptr' para señalar la dirección de memoria en la memoria.



Pasamos el array al puntero para acceder a la dirección. Como todos sabemos, las matrices siempre contienen varios elementos en diferentes ubicaciones. Entonces, necesitábamos un bucle con el puntero de 'ayuda' para acceder a cada elemento de una matriz. Cada vez que se ejecuta el bucle, obtenemos la dirección de memoria y los valores de esta dirección con la ayuda del operador de incremento aritmético de puntero 'ptr++' que cambia la dirección de memoria a la siguiente dirección de la memoria. El ciclo de ejecución del bucle depende del tamaño de una matriz. Fuera del bucle, queremos que el puntero regrese a la dirección de memoria anterior simplemente usando el puntero de decremento “ptr- -”.



Ejecute este código haciendo clic en la opción Ejecutar>Compilar y ejecutar y obtendrá el siguiente resultado:






Con suerte, este resultado es fácil de entender. Se cambian la dirección y el valor de la memoria. Desplazar el puntero desde una ubicación solo es posible desde la aritmética del puntero incremental en C++.

Escenario 2: restar dos punteros en C++

En este escenario, aprenderemos cómo restar dos o más punteros en C++. Todas las operaciones aritméticas en las que viene la resta son procesos vitales ya que solo podemos restar dos punteros simultáneamente si y solo si tienen el mismo tipo de datos.



Las otras operaciones como suma, multiplicación y división no son posibles en el puntero porque no tienen sentido en el direccionamiento de memoria. El fragmento de código se adjunta a continuación:

#incluir
ent principal ( ) {
Él llama [ ] = { 23 , 36 , 42 , 51 , 62 , 77 , 89 , 96 , 100 } ;
En t * ptrr1 = & A ese [ 3 ] ; // Puntero al tercer elemento ( 42 )
En t * ptrr2 = & A ese [ 6 ] ; // Puntero al sexto elemento ( 89 )
ptrdiff_t ptrrestar = ptrr2 - ptrr1;

std::cout << 'La diferencia entre estas direcciones es: ' << ptrrestar << 'elementos' << std::endl;
    devolver 0 ;
}

 
La operación de resta consiste en encontrar la diferencia entre la dirección de memoria en C++. En la función principal, tomamos una matriz que contiene diferentes valores en diferentes índices. En una matriz, cada índice tiene una ubicación de memoria diferente. Sólo podemos encontrar la diferencia entre dos punteros con la ayuda de una aritmética de punteros. Aquí usamos un tipo de puntero especial 'ptrdiff_t' que debe usarse para encontrar las diferencias entre dos o más punteros en C++.

El resultado de este código se adjunta a continuación:


La diferencia entre estas direcciones es por el elemento de tornillo de banco que es 3.

Escenario 3: comparar dos o más punteros en C++

En este escenario, aprenderemos cómo comparar los diferentes punteros en C++ usando diferentes operadores relacionales como “==”, “<=”, “>=”, “<”, ”>”. Sólo podemos comparar los punteros si apuntan a la dirección de elementos de la misma matriz. Recuerde que comparar dos punteros con tipos diferentes puede provocar un comportamiento indefinido. El fragmento de código relacionado con la comparación de punteros se menciona a continuación:

#incluir
usando el espacio de nombres estándar;
ent principal ( )
{
int arr1 [ 10 ] = { 4 , 7 , 9 , 11 , 14 , 16 , 18 , 20 , 22 , 25 } ;
En t * ptr1 = & arr1 [ 3 ] ;
En t * ptr2 = & arr1 [ 6 ] ;
En t * ptr3 = & arr1 [ 8 ] ;
En t * ptr4 = & arr1 [ 9 ] ;
    si ( ptr1 ==ptr2 )
    {
std::cout << 'los punteros son iguales' << fin;
    }
    demás si ( ptr3 < =ptr4 )
    {
std::cout << 'ptr3 es menor o igual que ptr4' << fin ;;
    }
    demás
    {
std::cout << 'Los indicadores no se comparan en ningún momento' << fin;
    }
    devolver 0 ;
}

 
Aquí, tomamos una matriz con 10 elementos. Declaramos cuatro punteros que apuntan a un índice diferente de la matriz. Después de eso, comparamos estos cuatro punteros en diferentes condiciones como se ve en el código proporcionado. En la condición 'si', verifique si el puntero 'ptr1' es igual al puntero 'ptr2' y luego imprima los 'punteros son iguales'. Cuando tenemos múltiples condiciones en las que usamos la condición 'si no' para verificar si el puntero 'ptr3' es menor que igual al puntero 'ptr4'. Después de todo eso, haga clic en el Ejecutar > Compilar y ejecutar opción.

El resultado de este código se adjunta a continuación:


Muestra una condición válida en la pantalla de la consola y sale de la compilación. El puntero 'ptr3' contiene un valor que es menor o igual que el valor del puntero 'ptr4'.

Escenario 4: mostrar un número impar con aritmética de punteros

Aquí veremos cómo podemos asignar dinámicamente la memoria para una matriz de un número entero. El fragmento de código relacionado con este caso se proporciona a continuación:

#incluir
ent principal ( ) {
números enteros [ ] = { 1 , 12 , 33 , 24 , 15 , 776 , 71 , 18 , 29 , 50 } ;
En t * ptrr = números;
std::cout << 'Números impares en las matrices: ' ;
    para ( int yo = 0 ; i < 10 ; ++yo ) {
        si ( * ptrr % 2 ! = 0 ) {
std::cout << * ptrr << ' ' ;
        }
ptrr++;
    }
std::cout << std::endl;
    devolver 0 ;
}

 
En la función principal, tomamos una matriz que contiene 10 elementos. Necesitamos un puntero que señale todos los elementos de la matriz para verificar el número impar en la matriz. En el bucle 'for', verifique el número impar dividiendo el elemento actual de una matriz. El contador del puntero se incrementa después de verificar un elemento de una matriz.

Después de ejecutar el código, el resultado se muestra en la pantalla de la consola que se muestra a continuación:


De esta forma, podemos mostrar los números impares usando la aritmética del puntero en la pantalla de la consola.

Conclusión

Concluimos aquí que la aritmética de punteros es la herramienta más eficaz para realizar diferentes operaciones en C++. Asegúrese de que el puntero incremente o disminuya el valor de una matriz que tenga el mismo tipo de datos. Podemos comparar los valores de una matriz por sus direcciones de memoria con la ayuda de la aritmética de punteros en el lenguaje de programación C++. Podemos recorrer la matriz y administrar la memoria fácilmente con la ayuda de la aritmética de punteros.