Punteros

Un puntero (pointer) es una variable o constante cuyo valor no es un dato directo, sino una dirección de memoria. Por eso decimos que “apunta” - no contiene el valor final, sino la ubicación.

Esa dirección normalmente señala un dato como un número, carácter, cadena, booleano etc.

Como ejemplo, aquí n_x contiene el número 42:

      const n_x: u8 = 42;

Pero en este otro caso:

      const n_x: *const u8 = &42;

Si imprimimos n_x, veremos algo como: u8@11961b5. Esto significa: “valor tipo u8 almacenado (@ = at) en la dirección de memoria 11961b5.

La declaración donde indicamos el tipo con  *const u8 significa:

Ten en cuenta que const delante de n_x quiere decir que n_x es un valor constante - esto significa que una vez asignado, no puede apuntar a otra dirección, pero puede apuntar a una constante o variable.

Si queremos acceder al contenido en la dirección a la que apunta el puntero, ponemos un .* después del nombre:

      print(“{}\n”, .{ n_x.* });

En nuestro caso, imprimirá un 42.

Este es un ejemplo de puntero apuntando a la dirección de una variable:

ptr2var.zig

const std = @import("std");

const print = std.debug.print;

pub fn main() void {

    // definimos una variable

    var n_a: u8 = 42;

    // el puntero n_x es constante pero apunta

    // a una dirección que contiene una variable

    const n_x: *u8 = &n_a;

    // imprimimos el contenido de la dirección

    print("n_x: {}\n", .{n_x.*});

    // incrementamos

    n_x.* += 1;

    // una vez más, imprimimos el contenido de la dirección

    print("n_x: {}\n", .{n_x.*});

}

$ zig run ptr2var.zig

n_x: 42

n_x: 43

Tiempos de memoria
Tipos de cadenas
© 2025 Zen of Zig