Cómo agregar dos elementos de matriz usando punteros

Mirando las fotos de los comentarios en la primera respuesta

p es un puntero que contiene el espacio de memoria donde está contenido el primer valor de la matriz. si imprime p verá un número como 1606416192, este espacio de memoria contiene el primer valor de la matriz, en su caso el valor 1. Puede acceder a los otros espacios de memoria con p [1], p [2] . Además, puede usar * p para acceder al primer espacio de memoria: por ejemplo
printf (“% d”, * p + 1);

accederá al segundo espacio de memoria (el segundo valor):
* p es lo mismo que p [0]
* (p + 1) es lo mismo que p [1]
* (p + 2) es lo mismo que p [2]

la línea
suma + = * p + * q;
cambiar a
suma + = p [i] + q [i];

o

suma + = * (p + i) + * (q + i);

o

suma + = * (p ++) + * (q ++)

No entiendo por qué la siguiente línea es sum ++;

cuando declaras un puntero int * p es una referencia a un espacio de memoria
pero cuando usa * p es un operador de deferencia (en este caso en una suma), está extrayendo la información de este espacio de memoria.

Lea esto si necesita más ayuda con el operador de deferencia: ¿Qué significa “desreferenciar” un puntero?

Un ejemplo en código:

#include

int main (int argc, const char * argv []) {

int arr1 [5] = {1, 12, 3, 4, 7};

int arr2 [5] = {10, 11, 2, 8, 5};

int * p, * q, * p_tmp, * q_tmp;

int nElement = 0, sum = 0, sum2 = 0, sum3 = 0;

p = arr1;

q = arr2;

p_tmp = arr1;

q_tmp = arr2;

para (nElement = 0; nElement <5; nElement ++) {

suma + = * (p + nElement) + * (q + nElement);

}

para (nElement = 0; nElement <5; nElement ++) {

sum2 + = p [nElement] + q [nElement];

}

printf (“La suma es:% d% d \ n”, sum, sum2);

printf (“Tamaño de int:% d bytes \ n”, sizeof (int));

printf (“Dirección de memoria \ t \ t | Dirección de memoria \ n”);

printf (“de p_tmp \ t valor | de q_tmp \ t valor \ n”);

para (nElement = 0; nElement <5; nElement ++) {

printf (“% d \ t \ t% 2d |% d \ t \ t% 2d \ n”, p_tmp, * p_tmp, q_tmp, * q_tmp);

sum3 + = * (p_tmp ++) + * (q_tmp ++); / ** Mueve el puntero al siguiente bloque de memoria, 4 bytes de diferencia. ** /

}

printf (“Ahora el puntero apunta a una dirección de memoria fuera de la matriz y contiene basura \ n”);

printf (“Memoria% d valor% d memoria% d valor% d \ n”, p_tmp, * p_tmp, q_tmp, * q_tmp);

printf (“Mueve el puntero a la última dirección de memoria \ n”);

printf (“% d% d \ n”, * (- p_tmp), * (- q_tmp));

printf (“La suma es:% d% d% d”, sum, sum2, sum3);

printf (“\ n”);

devuelve 0;

}

¡Mis mejores deseos!

Suponiendo que estamos hablando de dos punteros enteros que apuntan a dos elementos de la matriz:

int c = * p1 + * p2;

La clave es el operador de desreferencia “*”, que dice: “Dame el valor al que apunta este puntero”.