Test Foro de elhacker.net SMF 2.1

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 (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.
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 (cpp) [Seleccionar]

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
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.