Estoy tratando de obtener el código para imprimir "1000 100 10 1" pero sigo obteniendo "100 10 1 0". ¿Alguna idea de por qué ocurre esto? Cualquier ayuda sería apreciada. Gracias.

#include <iostream>
using namespace std;

int main()
{
    int arr[4] = { 0, 1, 2, 3 };
    int *ptr;
    ptr = arr;

    *ptr = arr[0] + 1;                   // set arr[0] to 1
    * ( ptr + 1 ) = arr[ 0 ] * 10;      // set arr[1] to 10
    * ( ptr + 2 ) = arr[ 0 ] * 100;     // set arr[2] to 100
    * ( ptr + 3 ) = arr[ 0 ] * 1000;     // set arr[3] to 1000

    cout << "arr[4] = { " << arr[0] << ", " << arr[1] << ", " << arr[2] << ", " << arr[3] << " }" << endl;
    ptr += 3;
    while (ptr >= arr)
    {
        ptr--;
        cout << " " << *ptr;    
    }
    cout << endl;
    return( 0 );

}
0
B.can 7 mar. 2018 a las 02:53

3 respuestas

La mejor respuesta

ptr += 3 significa que está apuntando a arr[3] pero lo hace ptr-- antes de usar la dirección, por lo que su impresión realmente comienza en arr[2]

La condición final también es peligrosa ya que establece ptr en una dirección que "no es suya". En teoría, estás a salvo porque nunca lo usas, pero sigue siendo una práctica peligrosa tener punteros con malos valores flotando ...

Yo lo haría:

ptr += 3; // ptr still points to valid memory
while (ptr >= arr)
{
    cout << " " << *ptr;   
    ptr--; // ptr decremented after use so print starts at arr[3] 
}
3
John3136 7 mar. 2018 a las 00:11

Movió el puntero al último elemento y luego lo devolvió al elemento anterior antes de imprimir.

También tenga en cuenta que mover el puntero más allá del primer elemento invoca comportamiento indefinido .

Prueba esto:

ptr += 4; // move the pointer one element after the last element (this is allowed unless you dereference it)
while (ptr > arr) // use > instead of >=
{
    ptr--;
    cout << " " << *ptr;    
}

En lugar de

ptr += 3;
while (ptr >= arr)
{
    ptr--;
    cout << " " << *ptr;    
}
1
MikeCAT 6 mar. 2018 a las 23:59
ptr = arr;

ptr apunta al primer elemento

ptr += 3;

Ahora apunta al cuarto elemento en el índice 3; El último índice donde el valor es 1000.

while (ptr >= arr)

Nosotras entramos en el bucle.

ptr--;

Ahora señalamos el tercer elemento, en el índice 2; donde el valor es 100.

cout << " " << *ptr;

Imprimimos el valor, que es 100.


Si desea comenzar a imprimir desde el último elemento de la matriz, debe obtener el valor del puntero cuando apunta al último elemento; no después de haber disminuido el puntero.

1
eerorika 7 mar. 2018 a las 00:00