Asunto con punteros y arreglos en c

Iniciado por Jay, 3 Mayo 2019, 22:18 PM

0 Miembros y 1 Visitante están viendo este tema.

Jay

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

Loretz

#1
Va en el ejemplo:

Código (cpp) [Seleccionar]
#include <iostream>

int main()
{
   char claveHabitacion[10][10] = { "ST1", "ST2", "ST3", "ST4", "ST5", "ST6", "ST7", "ST8", "ST9", "ST10" };

   char* pm;

   // pm = &claveHabitacion[9];
   /* el problema aquí es que &claveHabitacion[9] es de tipo char(*)[10]
      y no puede asignarse a un char*

      Pero puedes hacer:
   */

   pm = reinterpret_cast<char*>(&claveHabitacion[9]);

   std::cout << pm;
}


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.

K-YreX

Otra opción sería esta:
Código (cpp) [Seleccionar]

char *pm = claveHabitacion[9];
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Jay

Vale eso lo entiendo pero como imprimiria solamente esa posicion la 9

RayR

Cita de: Jay en  5 Mayo 2019, 21:17 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
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
claveHabitacion[9]
de nuevo, SIN &. O bien, haz como te dijo YreX-DwX, y manda a imprimir pm, y ya.