Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Jay en 3 Mayo 2019, 22:18 pm



Título: Asunto con punteros y arreglos en c
Publicado por: Jay en 3 Mayo 2019, 22:18 pm
Hola tengo un arreglo bidimensional inicializado aqui, me gustaria saber como crear un apuntador que me apunte a un dato de este arreglo.
char claveHabitacion [10][10] = {"ST1", "ST2", "ST3", "ST4", "ST5", "ST6", "ST7", "ST8", "ST9", "ST10"};

char *pm;

pm=&claveHabitacion[9]; //por ejemplo aqui le digo que me asigne ala direccion de la posicion 9 de mi arreglo pero me marca un warning y no se imprime

pm=&claveHabitacion; // al igual al hacer esto me sige marcando warning y no se imprime se supone que deberia imprimirse el arreglo pero

porfavor ayuda por ejemplo yo solo quiero apuntar a ST1 y eso es lo que necesito imprimir ST1 es un elemento del arreglo


Título: Re: Asunto con punteros y arreglos en c
Publicado por: Loretz en 4 Mayo 2019, 00:59 am
Va en el ejemplo:

Código
  1. #include <iostream>
  2.  
  3. int main()
  4. {
  5.    char claveHabitacion[10][10] = { "ST1", "ST2", "ST3", "ST4", "ST5", "ST6", "ST7", "ST8", "ST9", "ST10" };
  6.  
  7.    char* pm;
  8.  
  9.    // pm = &claveHabitacion[9];
  10.    /* el problema aquí es que &claveHabitacion[9] es de tipo char(*)[10]
  11.        y no puede asignarse a un char*
  12.  
  13.        Pero puedes hacer:
  14.     */
  15.  
  16.    pm = reinterpret_cast<char*>(&claveHabitacion[9]);
  17.  
  18.    std::cout << pm;
  19. }

Pero ten presente que usar reinterpret_cast se entiende como cuando un yogur está de oferta dos horas antes del vencimiento, no sé si me explico.


Título: Re: Asunto con punteros y arreglos en c
Publicado por: K-YreX en 4 Mayo 2019, 03:19 am
Otra opción sería esta:
Código
  1. char *pm = claveHabitacion[9];


Título: Re: Asunto con punteros y arreglos en c
Publicado por: Jay en 5 Mayo 2019, 21:17 pm
Vale eso lo entiendo pero como imprimiria solamente esa posicion la 9


Título: Re: Asunto con punteros y arreglos en c
Publicado por: RayR en 5 Mayo 2019, 22:49 pm
Vale eso lo entiendo pero como imprimiria solamente esa posicion la 9
Pues exactamente como te dijo YreX-DwX. Tu problema era que estabas usando el operador de dirección & cuando no debías, complicando un problema que en realidad es muy simple. Cada uno de los 10 elementos del arreglo claveHabitacion es a su vez un arreglo char. Tan solo con que escribas
Código:
 claveHabitacion[0]
// O claveHabitacion[1], etc
ya te estás refiriendo a una cadena, y no necesitas hacer nada más. Así, para imprimir la cadena en la posición 9, simplemente pide a printf que imprima
 
Código:
claveHabitacion[9]
de nuevo, SIN &. O bien, haz como te dijo YreX-DwX, y manda a imprimir pm, y ya.