|
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");
|