CursosEmpresasBlogLiveConfPrecios

Punteros

Clase 11 de 37 • Curso de Introducción a C 2019

Clase anteriorSiguiente clase
    Miqueas Gamero

    Miqueas Gamero

    student•
    hace 5 años

    Esta clase ha sido complicada. Dejo mi resumen por si a alguien le es útil:

    Captura.PNG

      Lautaro Cabral

      Lautaro Cabral

      student•
      hace 5 años

      Te falto hacer que el puntero apunte a la dirección en memoria de la variable number, si no lo haces el código retornaría null, hay que recordar que para obtener la dirección en memoria de una variable; escribimos &mivariable Entonces en este caso escribiríamos &number También hay algunos pequeños errores de sintaxis pero bueno, siempre se nos pueden escapar o quizás los obviaste porque sólo es un apunte

      De todas maneras acá dejo la correción de tu código

      int main () { int number = 10; int * pointToNumber = &number; printf("%p, %d", pointToNumber, *pointToNumber); return 0; }

      Me gusta tu herramienta para apuntes ¿Me la puedes compartir?

      Miqueas Gamero

      Miqueas Gamero

      student•
      hace 5 años

      ¡Uy si! Se me escapaó ese detalle. Mil gracias. También corregí los de sintaxis jaja. Tal cual, como es un apunte por ahí me concentro en tomar los conceptos más generales. Lo que uso es OneNote, muy buena herramienta. De paso te dejo un link con algunos tips que sirven para iniciarse a usarla. https://www.youtube.com/watch?v=SUu8cZzKewM

    Hector Esau

    Hector Esau

    student•
    hace 6 años
    Screenshot from 2020-05-09 18-06-07.png
      Carlos Quintana Solis

      Carlos Quintana Solis

      student•
      hace 5 años

      Gracias por el aporte

      Elmer Padilla Espinoza

      Elmer Padilla Espinoza

      student•
      hace 5 años

      Gracias Hector, resumido el capitulo.

    Jose Oliva Rivera

    Jose Oliva Rivera

    student•
    hace 6 años

    Este tema es clave para entender C, se debe prestar mucha atención.

    Andrés Vega

    Andrés Vega

    student•
    hace 6 años

    Nunca entendí esta clase en la Universidad, espero me sorprenda profesor,

      Juan Castro

      Juan Castro

      teacher•
      hace 6 años

      También te pueden ayudar estas clases del curso de C++: https://platzi.com/clases/1545-c-plus-plus/19070-que-son-los-apuntadores/. :wink:

      Mauro Chojrin

      Mauro Chojrin

      teacher•
      hace 6 años

      @gydoar Ojalá que sí! Cualquier duda puedes dejar tu pregunta!

    Daniel Alejandro Cumaco Robayo

    Daniel Alejandro Cumaco Robayo

    student•
    hace 6 años

    el curso esta muy flojo, tenie en varios videos errores de codigo que no llega a suceder por mera casualidad como setea las variables, ademas de que aplica muchas malas practicas, se que es introductorio, pero veo que es mas para alguien que ya sabe low-level con otro lenguaje y quiere rapidamente ver como se hace en C

      Zois Ruggiero

      Zois Ruggiero

      student•
      hace 6 años

      Se, yo lo estoy viendo en la facultad, no pone ni habla sobre los prototipos de función, no usa el return 0 en el main . La clase de funciones son 3 min, muy corta apenas ejemplifica una tipo de función con retorno entero. Son de los ultimos cursos que voy hacer. Hay mucho relleno. Hize 3 cursos de python y literal en los 3 habia muchas clases explicando lo mismo y no incluia nada nueevo. Obviamente no se puede esperar el mejor contenido del mundo si comparas el precio de estos cursos con otro pero bueno. No cuesta mucho hacer un video de más de 3 min explicando varios tipos de funciones.

    Jose Antonio Rojas Ollarves

    Jose Antonio Rojas Ollarves

    student•
    hace 5 años

    Organizacion de la memoria: La memoria se organiza en forma de celdas, por medio de bytes, como por ejemplo podemos tener una representacion de esta forma, donde cada cerda representa un byte, lo cual dentro de ella son 8 bits

    --> Esto lo que significa es que dentro de una celda podemos guardar un valor numerico como maximo de 255, y si queremos guardar un valor numerico mas grande tendremos que utilizar otro Byte. Entonces cada vez que tengamos que agregar un valor numerico mas grande vamos a estar necesitando abarcar mas celdas, para almacenar su valor.Direcciones de memoria: Son predefinidas, con notacion hexadecimal, lo que quiere decir que son cantidades tan grandes que se necesita utilzarlo.

    --> Entonces cuando estamos asignando una variable, lo que realmente estamos es asignando un nombre, un nombre que es mas facil de recordar que una direccion exadecimal y su valor es el que se encontrara dentro de la celda.nil: Significa null o nuloPunteros: Su funcion es buscar un espacio de memoria donde estan las variables, puesto que si buscamos o intentamos ingresar a una variable equivocada o que siquiera existe vamos a tener error en el codigo, los punteros solamente pueden manejar espacio de memoria lo que quiere decir que no manejaran otro tipo de variable.--> Lo que quiere decir que al momento de crear una variable de tipo puntero, su contenido sera unicamente la direccion de la variable asignada. --> Una de las formas de encontrar la direccion en memoria de una variable es de la siguiente forma:

    * &+ la variable --> &x

    --> Esto lo podemos escribir en un prinft, dentro de ella de la siguiente forma:#include <stdio.h>int main (){ int x = 10, z; printf("El valor de x es: %d\n", x); printf("Su direccion es: %d\n", &x); return 0;}IMPORTANTE lo tenemos que hacer con %u, para que la direccion no salga con valores positivos o negativos, entonces quedaria asi:

    printf("Su direccion es: %u\n", &x);

    --> Entonces con esto, tenemos que la variable x se almacena en esa direccion de nuestra memoria del ordenadorGuardar direccion con puntero: Si queremos guardar la direccion de memoria donde se almacena la variable para ello lo tenemos que hacer con el puntero, para ello lo que tenemos que hacer es lo siguiente:

    * int* --> declaramos el tipo de variable y le agregamos

    enseguida un * esto lo que indicara que es una variable de direccion de memoria.

    * int* + nombre de la variable "direct" = &x;

    --> entonces la variable direct de tipo direccion de memoria es la que va a encerrar la direccion de memoria de la variable X. Esto es lo que se le llama puntero

    IMPORTANTE Funciona con cualquier otro tipo de variable puede ser variable de tipo floatUso del puntero: El principal uso que tienen los punteros en el lenguaje C, es trabajar con referencias en las funciones, lo que quiere decir, que cuando por ejemplo estamos pasandole una variable a una funcion, lo que realmente le estamos pasando es una copia, por ejemplo tenemos el siguiente ejemplo de codigo: #include <stdio.h> void jugar (int n){ n = n + 5; printf("vale: %d\n", n);}int main (){ int x = 10; jugar(x); printf("valez: %d\n", x);}

    --> Entonces una vez que termina la funcion esa copia muere, ya no tiene mas relevancia en el codigo puesto que las funcion se cumple cuando hasta que sea necesaria

    IMPORTANTE Cuando trabajamos con puntero, trabajamos con direcciones en memoria y no con variables

    Recuperar el valor de puntero: Para ello tenemos que declarar un * antes des de una variable, de forma que se recuperara la direccion de la variable:

    * int y = *n;

    --> Entonces, para cambiar el valor de la celda lo hacemos de la siguiente forma:

    #include <stdio.h> void jugar (int* n) { int y = *n; y = y + 5 * 3 - 1; *n = y; //printf("direccion es: %u\n", y); } int main () { int x = 10; jugar(&x); printf("valez: %d\n", x); return 0; }

    --> Entonces con esto lo que estamos haciendo, es cambiarle el valor a la direccion, que la direccion se guarda en *n, con la recuperacion, es decir la sustituye, entonces ya no seria la anterior sino en este caso la direccion de x, seria el resultado de la ecuacion.

    David Barreto

    David Barreto

    student•
    hace 5 años

    Gracias Platzi por que puedo volver aqui y ver la clase de nuevo, estando adelante en el curso en un a clase de los string y me perdi con la definicion de los punteros, solo volvi aqui y ya lo aclare.

    Rubén Fabián Ponce Segura

    Rubén Fabián Ponce Segura

    student•
    hace 5 años

    ¿Cuál es el uso de &? ¿Qué función tiene cuando se usa junto con el nombre de una variable?

      Alex Camacho

      Alex Camacho

      teacher•
      hace 5 años

      El ampersand (&) significa indicar la dirección en memoria de la variable, enviando el valor por referencia. Por lo tanto es enviar una variable por paso por referencia en lugar de por valor.

      Irving Juárez

      Irving Juárez

      student•
      hace 5 años

      El & tambien se usa con el scanf para indicar a que variable va a pertenecer el valor que el scanf escaneo. Como en el siguiente ejemplo.

      int main(void) { int numero; printf("Ingresa un numero random: "); scanf("%i", &numero); return 0; }```
    Jean Nuñez

    Jean Nuñez

    student•
    hace 6 años

    No hay algo mas dificil de manejar que punteros en C, segun asi lo ruerdo en la universidad, pero esta explicacion es muy facil de asimilar

    Ivan Lopez

    Ivan Lopez

    student•
    hace 5 años

    Este prógrama que hice me ayudo a enternderlo un poco mejor

    #include <stdlib.h> #include <stdio.h> int main () { //Declaracion de variables int x = 45; int *puntero; printf("\nDIRECCION del puntero : %p",puntero); printf("\nDIRECCION de la variable: %p",&x); printf("\nVALOR DEL PUNTERO : %i",*puntero); printf("\nVALOR DE LA VARIABLE: %i",x); //Apuntar a la direccion de la variable puntero = &x; //Entrada de datos printf("\n\nDigite un numero: "); scanf("%i",puntero); //camiar el valor de la variable x con punteros *puntero = x; printf("\nDIRECCION del puntero : %p",puntero); printf("\nDIRECCION de la variable: %p",&x); printf("\nVALOR DEL PUNTERO : %i",*puntero); printf("\nVALOR DE LA VARIABLE: %i\n",x); return 0; }
    Captura de pantalla de 2020-08-20 03-00-17.png
    Carlos Lefin Henriquez

    Carlos Lefin Henriquez

    student•
    hace 5 años

    A que se refiere cuando dice que " La concecuencia de agragar mas bytes tiene como resultado agregar numeros mas grandes pero a la vez menos cantidad de esos numeros" suena un poco contradictorio.

      Dilan Santiago Ariza Cañon

      Dilan Santiago Ariza Cañon

      student•
      hace 5 años

      Se refiere a que el numero en cuestión puede ocupar un gran espacio, ejemplo:

      • 1236542432982293923927839259193461242014634592323685229332651927419075323090919652359121463532

      Pero estas utilizando muy pocos números grandes, ósea estas utilizando mas de lo que necesitas para abarcar todos tus numeros

      Sergio Brandon De Lucio Chavero

      Sergio Brandon De Lucio Chavero

      student•
      hace 5 años

      Debemos recordar la equivalencia en binario de cada numero y también que 8 bits forman un byte, el máximo número alcanzable con un byte es : 11111111 lo que es equivalente a 255, entonces si queremos expresar números > a 255 tendremos que ocupar mas de un byte, por ejemplo : 300 a binario seria 0000000100101100 lo cual ocupa 2 bytes de información, usualmente se eliminan los ceros de enfrente porque se sobre entiende que ahí están.

    James Kristof Ubiarco Rodriguez

    James Kristof Ubiarco Rodriguez

    student•
    hace 6 años

    No entendí la parte de representar números mas grandes pero en menor cantidad

      Ivan Alejandro Garcia Perez

      Ivan Alejandro Garcia Perez

      student•
      hace 6 años

      Se refiere a que la memoria puede almacenar números grandes y eso necesitara más celdas de memoria, entonces vamos a poder almacenar pocos de esos números grandes. Quizá ésta analogía te funcione, imagina que hay un autobús (es la memoria) y pueden ir 20 personas sentadas en asientos, cada persona ocupa un solo asiento (números pequeños), pero llegan personas más grandes que necesitan 2 asientos cada una (números grandes), y entonces ya no podrías llevar a 20 pasajeros sino a 10 porque necesitan 2 asientos cada una. :)

      Hector Esau

      Hector Esau

      student•
      hace 6 años

      Si tienes una memoria de 8 bytes y tu número está entre 0 y 255 (es decir solo necesitas un byte) podrás almacenar 8 números diferentes, sin embargo si tu número es mayor (al menos necesitarás 2 bytes) entonces solo podrás almacenar 4 Dependiendo del tamaño de tu número es la cantidad de bytes necesarios para almacenarlo

    Oswaldo Merchan

    Oswaldo Merchan

    student•
    hace 4 años

    Asi que no entendiste!....lo se ...no te preocupes...te Dejo por aca este excelente aporte de la Dra Teresa Alarcón la cual explica extremandamente bien y de forma sencilla el tema de los punteros, para aquellos que quedaron con alguna duda https://www.youtube.com/watch?v=nmevgUlakik

      Leonardo Véliz

      Leonardo Véliz

      student•
      hace 4 años

      De hecho sí entendí salvo por la parte de la desreferenciación, volví a ver el video y ya me quedó el concepto claro.

    Sergio Noriega

    Sergio Noriega

    student•
    hace 5 años

    una pregunta por que me sale este error.: ![](

    ayuda.PNG

    David Felipe Bohórquez

    David Felipe Bohórquez

    student•
    hace 6 años

    Excelente clase, muy claro.

      Mauro Chojrin

      Mauro Chojrin

      teacher•
      hace 6 años

      Gracias!! Me alegra que te haya gustado :)

    Miguel Ángel Ríos Yáñez

    Miguel Ángel Ríos Yáñez

    student•
    hace 6 años

    Me exploto la cabeza pero logre, aprender un poco mas de los punteros

    Carlos Herrera

    Carlos Herrera

    student•
    hace 5 años

    Que clase tan genial, cada día se aprende algo nuevo.

    ![](

    Grafica-apuntadores.PNG

      Miqueas Gamero

      Miqueas Gamero

      student•
      hace 5 años

      ¿Haces un ejecutable desde Atom y luego lo corres en la consola de Windows?

      Carlos Herrera

      Carlos Herrera

      student•
      hace 5 años

      No uso el Entorno DevC++ el cual conocía de tiempo atrás y con el que aprendí cosas de programacion en C. Para no tener que tirar comandos en consola lo estoy usando.

    Nelson Allauca

    Nelson Allauca

    student•
    hace 5 años

    Mediante los punteros es posible modificar el contenido de una posición de memoria. Hice el siguiente ejemplo:

    #include <stdio.h> int main (){ int numero1=20; int * punteroNumero1=&numero1; printf ("variable numero1 antes de ser modificada por el puntero:%d\n", numero1); *punteroNumero1=30; printf ("variable numero1 después de ser modificada por el puntero:%d\n", numero1); return 0; }

    Este es el resultado:

    Screenshot_20200611_133553.png
    Irvin Vallejo

    Irvin Vallejo

    student•
    hace 6 años

    Hice este código

    #include &lt;stdio.h&gt; int main() { int number; int * pointToNumber; printf(&quot;(%p)\n&quot;, pointToNumber ); }

    Me dió ese resultado y no el nulo (0000002F)

      William Rodriguez

      William Rodriguez

      student•
      hace 6 años

      Formatea el computador ajjaja no tiene sentido que te de una dirección de memoria.

      jonathan gonzalez

      jonathan gonzalez

      student•
      hace 6 años

      ¿Por qué encerraste %p entre paréntesis?

    Pablo Hugo Montenegro

    Pablo Hugo Montenegro

    student•
    hace 6 años

    por que pone int main() en lugar de main solo?

      Arturo O. Téllez

      Arturo O. Téllez

      student•
      hace 6 años

      Porque se especifica el tipo de dato que retorna la función main. Si no optamos por no poner int main(); se puede cambiar por void main(). Pero al final no se debe de incluir el return. :)

      Oscar Grey

      Oscar Grey

      student•
      hace 6 años

      Pero el return es escencial para devolver el código de error

Escuelas

  • Desarrollo Web
  • English Academy
  • Marketing Digital
  • Inteligencia Artificial y Data Science
  • Ciberseguridad
  • Liderazgo y Habilidades Blandas
  • Diseño de Producto y UX
  • Contenido Audiovisual
  • Desarrollo Móvil
  • Diseño Gráfico y Arte Digital
  • Programación
  • Negocios
  • Blockchain y Web3
  • Recursos Humanos
  • Finanzas e Inversiones
  • Startups
  • Cloud Computing y DevOps

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads