66. C++ || Punteros



En esta nueva sección veremos un tema que para muchos representa un gran dolor de cabeza, y con esto me refiero a los punteros en C++. Sin embargo, no nos vamos a apegar a esta mala tradición. No veo la necesidad de decir que los punteros son difíciles de aprender; difícil es que el estudiante estudie y se esfuerce.

Nos adentraremos a fondo en este apartado ya que es muy importante a la hora de programar en C++, y de hecho, este concepto es quien aporta toda la eficiencia que proporciona el lenguaje. Si no existiera la presencia de los punteros en un programa, tal vez no sería tan potente como el programador desearía.

A pesar de no ver el estudio de los punteros como una tarea muy complicada, vamos a entender de dónde nace esto, es decir, el problema a la hora de la enseñanza, es que en todas partes se encuentra el mismo concepto, no importa que sea en un libro, vídeos, en clases o por medio de otra persona, casi siempre dirán lo mismo. Esta práctica al parecer no da mucho resultados, porque si así no lo fuera, no existiría esa idea sobre que entender los punteros es muy difícil. Por eso trataré de crear un contenido más fresco de cara al estudiante. Los tiempos cambian y es sólo la educación la que se queda estancada en mejorar el proceso de aprendizaje. Quizá no han notado la importancia de transmitir los conocimientos de otra manera, y siempre lo han hecho igual; qué mal eso pienso yo.

A lo largo del contenido, que será largo, trataré de explicar este tema desde otro punto de vista, uno que sea totalmente nuevo que sirva para algunos, que de verdad ayude y que sea fácil de comprender porque esa es la verdad; los punteros no generan dificultades...

Tú como lector, me encantaría que me apoyaras en esto que trato de hacer: Buscar una mejor manera de explicar las cosas. Y que tras cada entrada que publique, sea comentada por ti, sugiriendo una mejor forma de decir las cosas. Sin más palabrerías, veamos qué vamos a aprender ahora.


  • ¿Qué son las referencia y direcciones?
  • Concepto claro de los punteros.
  • Declaración e inicialización de punteros.
  • Indirección de punteros.
  • Punteros NULL y void.
  • Puntero a puntero.
  • Punteros y arrays.
  • Arrays de punteros.
  • Ventajas de los punteros.
  • Punteros de cadenas.
  • Aritmética de punteros.
  • Punteros constantes frente a punteros a constantes.
  • Punteros como argumentos de funciones.
  • Punteros a funciones.
  • Punteros a estructuras.

Y que la cantidad de contenidos no asuste a nadie, todo es cuestión de hacer un esfuerzo para ser mejor.

12 comentarios:

  1. calcule el valor de la siguiente suma 1+2+3+4+...+n

    ResponderEliminar
    Respuestas
    1. #include
      using namespace std;

      int main () {
      int n, suma = 0;
      cin >> n;
      int i = 1;
      while (i<=n){
      suma = suma + i;
      ++i;
      }
      cout << suma << endl;
      }

      Eliminar
    2. falta el despues del #include

      Eliminar
    3. es que no sale pero despues del #include tienes que poner < iostream > todo junto, sin espacios

      Eliminar
  2. No entiendo el que son las referencias y direcciones y lo demas que menciono en la pagina donde lo encuentro ?? por favor me puedan responder lo mas pronto posible.

    ResponderEliminar
  3. Implementar un algoritmo que imprima el elemento que se repite mas
    veces en un vector de enteros, de la siguiente forma:
    • El programa debe llenar el vector con 50 valores random, entre 1 y
    49
    • Luego se debe contar las veces que aparece cada elemento y generar
    un vector de valores y otro de frecuencias
    • Se debe borrar el elemento que se repite mas veces y el que se repite
    menos veces del vector original
    • Finalmente, calcular la suma de los elementos pares del vector
    original luego del borrado, y la suma de los elementos impares luego
    del borrrado

    ResponderEliminar
  4. Respuestas
    1. Hi Anónimo.. interesante problema, haber te ayudo a lo mas difícil, algo tarde jajaja

      Eliminar
    2. Este comentario ha sido eliminado por el autor.

      Eliminar
    3. #include
      #include
      #include
      #include

      using std::cout; using std::cin;
      using std::endl; using std::string;
      #define T 20
      #define RANGO T
      #define MITAD T/2
      bool Valida_nun(int vec[], int pos_j , int &t);

      /* SOLO CAMBIAD T PARA TAMAÑO DEL VECTOR Y RANGO PARA SU RANGO:: RANGO-1*/
      // std::vector , "es mas sencillo".
      // tomad en cuenta que por vector de tam 50 tiene un aprox. de casi 1000 iteraciones

      //RECORDAD SIEMPRE LIBERAR MEMORIA

      // ESTETICAMENTE NO ESTA BONITO

      int main() {

      srand(time(0x0)); // time
      const int TAM = (T / 3) + MITAD;
      auto vector = new int[T]; // creacion dinamica del vector entero
      auto frecuencia = new int[TAM+1]{}; // creacion de vector frecuencia.. si es 50 , 25 es suficiente
      auto valores = new int[TAM+1]{}; // creacion de vector valores.. igual que frecuencia

      Eliminar
    4. for (int n = 0; n < T; n++)
      vector[n] = 1 + rand() % (T-1); // llenando de 1 -> 49 aleatoriamente por for
      int conteo(0) ,a(0);
      int i, j;
      int tot = 0;
      for ( j = 0; j < T; j++)
      {
      if (!Valida_nun(vector, j,tot)) { // si no se encuentra el num nuevamente en vector,agregalo.
      valores[conteo++] = vector[j];

      }
      else
      continue;
      for ( i = j; i < T; i++)
      if (vector[j] == vector[i]) { // hacer el conteo en frecuencia de la misma posicion
      frecuencia[a] += 1;
      // tot++;
      }
      a++;
      }
      a = 0;
      cout << "Valores Frecuencia" << endl;
      while (valores[a])
      {
      cout << valores[a]<<" "< new int[50]
      delete[] frecuencia; // igual que arriba
      delete[] valores; // igual
      cout<< endl;
      return EXIT_SUCCESS;
      }

      bool Valida_nun(int vec[], int pos_j , int &t) {
      for (int i = 0; i < pos_j; i++) {
      //t = t+1;
      if (vec[i] == vec[pos_j])
      return true;
      }

      return false;
      }

      Eliminar
    5. noto que algunas cosas no se copian.. ni modo

      Eliminar