print("=== Pointers Demo ==="); print(""); print("--- Basic Pointer Operations ---"); x = 42; print("x =", x); ptr = &x; print("ptr = &x (pointer to x)"); print("*ptr (dereferenced) =", *ptr); print(""); print("--- Simulating Pass by Reference ---"); class RefDemo { RefDemo(this) { } swap(this, a, b) { temp = a[0]; a[0] = b[0]; b[0] = temp; } doubleValue(this, ref) { ref[0] = ref[0] * 2; } } demo = new RefDemo(); val1 = {10}; val2 = {20}; print("Before swap: val1 =", val1[0], ", val2 =", val2[0]); demo.swap(val1, val2); print("After swap: val1 =", val1[0], ", val2 =", val2[0]); num = {50}; print("Before double:", num[0]); demo.doubleValue(num); print("After double:", num[0]); print(""); print("--- Array as Reference Container ---"); data = {1, 2, 3, 4, 5}; print("Original array:"); for (i = 0; i < len(data); i++) { print(" data[" + str(i) + "] =", data[i]); } class ArrayModifier { ArrayModifier(this) { } multiplyAll(this, arr, factor) { for (j = 0; j < len(arr); j++) { arr[j] = arr[j] * factor; } } } modifier = new ArrayModifier(); modifier.multiplyAll(data, 10); print("After multiplying by 10:"); for (i = 0; i < len(data); i++) { print(" data[" + str(i) + "] =", data[i]); } print(""); print("--- Reference Wrapper Pattern ---"); class Ref { value = null; Ref(this, v) { this.value = v; } get(this) { return this.value; } set(this, v) { this.value = v; } } refInt = new Ref(42); print("Ref value:", refInt.get()); refInt.set(100); print("After set(100):", refInt.get()); print(""); print("All pointer tests completed");