Saltar al contenido principal
LibreTexts Español

8.3: Desreferenciación de puntero

  • Page ID
    82041
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Supongamos que tiene el siguiente fragmento de código:

    char *pc, c, b;
    
    c = 1;
    pc = &c;
    

    Hemos declarado dos variables, un char y un puntero a un char. Luego establecemos el contenido del char en 1, y establecemos el contenido del puntero a la dirección del char. Realmente no necesitamos saber qué es esta dirección, pero por el bien del argumento, digamos que c se encuentra en la dirección de memoria 2000 mientras que pc se encuentra en la dirección de memoria 3000. Si tuviéramos que buscar en la memoria de la computadora, en la dirección 2000 encontraríamos el número 1. En la dirección 3000, encontraríamos el número 2000, es decir, la dirección de la variable char. En un sistema típico, este valor podría alcanzar 32 bits o 4 bytes. En otras palabras, la memoria utilizada por pc son las direcciones 3000, 3001, 3002 y 3003. Por el contrario, en un sistema de 16 bits, pc solo abarcaría 3000 y 3001 (la mitad de bytes, pero muchas menos direcciones posibles).

    Como el contenido de (es decir, el valor de) pc nos dice dónde reside un char, podemos llegar a esa ubicación, y así el valor de la variable char c. Para ello, desreferenciamos el puntero con un asterisco. Podríamos decir:

    b = *pc;
    

    Lee esto como “b obtiene el valor en la dirección dada por pc”. Es decir, pc no nos da el valor, más bien, nos dice a dónde ir para obtener el valor. Es como si fueras a la oficina de tu profesor y pidieras tu calificación, y en cambio te entrega un trozo de papel que dice “Te lo enviaré por correo electrónico”. El trabajo no indica tu calificación, pero te muestra dónde encontrarla. Esto puede sonar indebidamente complicado al principio pero resulta tener innumerables usos. Por cierto, en este ejemplo el valor de b será 1 porque pc apunta a c, al que se le asignó el valor 1 al inicio. Es decir, b obtiene el valor en la dirección pc apunta a, que es simplemente c.


    This page titled 8.3: Desreferenciación de puntero is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by James M. Fiore via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.