2010-05-29 12 views
6

Soy un nuevo estudiante de programación, así que, por favor, perdona mi ignorancia. Mi asignación dice:¿Cómo reinicio mi puntero a una ubicación de matriz específica?

Escriba un programa que declare una matriz de 10 enteros. Escriba un ciclo que acepte 10 valores del teclado y escriba otro ciclo que muestre los 10 valores. No use ningún subíndice dentro de los dos bucles; use solo punteros.

Aquí está mi código:

#include "stdafx.h" 
#include <iostream> 
using namespace std; 

int main() 
{ 
    const int NUM = 10; 
    int values[NUM]; 
    int *p = &values[0]; 
    int x; 
    for(x = 0; x < NUM; ++x, ++p) 
    { 
     cout << "Enter a value: "; 
     cin >> *p; 
    } 
    for(x = 0; x < NUM; ++x, ++p) 
    { 
     cout << *p << " "; 
    } 
    return 0; 
} 

Creo que sé dónde está mi problema. Después de mi primer ciclo, mi puntero está en los valores [10], pero necesito volver a los valores [0] para visualizarlos. ¿Cómo puedo hacer eso?

+1

Esto suena más como C que C++ :-) – nc3b

+1

@ nc3b: he descubrió que muchas universidades dicen que enseñan C++ pero en realidad muestran C con 'cin' y' cout'. – zneak

+0

Sí, eso sucedió en mi escuela secundaria también :-( – nc3b

Respuesta

7

Puede hacer exactamente como lo hizo por primera vez cuando se ha asignado p:

p = &values[0]; 

Además, las matrices son muy similares a los punteros (que no se puede cambiar) a asignarse estáticamente memoria. Por lo tanto, la expresión &values[0] tiene el mismo efecto que solo values. En consecuencia,

p = &values[0]; 

es lo mismo que

p = values; 
+0

¡Muchas gracias! – talena6

+2

@ohtanya: No hay problema. Si funciona lo suficientemente bien, puede hacer clic en la marca de verificación debajo de la calificación de la respuesta para aceptar la respuesta :) – zneak

+1

Contrariamente a la creencia común, los arreglos son * no * punteros. En los punteros de lenguaje estándar son * valores-l * modificables, mientras que las matrices no lo son. Para demostrar el punto, compare dos asignaciones: 'p = values;' y 'values ​​= p;'. Ahí es donde viene esa sintaxis '' 'array & ordinaria ''. Funciona en este caso porque el nombre de la matriz se usa como un 'valor-r'. –

0

¿Su asignación decir que había que imprimir los números en orden? Si no es así, usted podría tener un poco de diversión mediante la impresión de que a la inversa:

while (p != values) 
{ 
    cout << *(--p) << " "; 
} 

(. Sólo tiene que usar este código para el aprendizaje)

Cuestiones relacionadas