39 lines
918 B
Plaintext
39 lines
918 B
Plaintext
|
|
// Public domain / CC0. Use freely for any purpose. RoyR 2026
|
||
|
|
// pointers.cm - Pointer operations
|
||
|
|
// Demonstrates: pointers, pointer arithmetic, dereferencing
|
||
|
|
|
||
|
|
void printf(uint8 *fmt);
|
||
|
|
|
||
|
|
void swap(int32 *a, int32 *b) {
|
||
|
|
int32 temp = *a;
|
||
|
|
*a = *b;
|
||
|
|
*b = temp;
|
||
|
|
}
|
||
|
|
|
||
|
|
int32 main(void) {
|
||
|
|
int32 x = 42;
|
||
|
|
int32 y = 17;
|
||
|
|
|
||
|
|
printf("Before swap: x=%d, y=%d\n", x, y);
|
||
|
|
swap(&x, &y);
|
||
|
|
printf("After swap: x=%d, y=%d\n", x, y);
|
||
|
|
|
||
|
|
// Pointer arithmetic with arrays
|
||
|
|
int32 arr[5] = { 10, 20, 30, 40, 50 };
|
||
|
|
int32 *ptr = arr;
|
||
|
|
|
||
|
|
printf("\nArray traversal with pointer arithmetic:\n");
|
||
|
|
for (int32 i = 0; i < 5; i = i + 1) {
|
||
|
|
printf("arr[%d] = %d (via pointer: %d)\n", i, arr[i], *(ptr + i));
|
||
|
|
}
|
||
|
|
|
||
|
|
// Pointer to pointer
|
||
|
|
int32 value = 99;
|
||
|
|
int32 *p1 = &value;
|
||
|
|
int32 **p2 = &p1;
|
||
|
|
|
||
|
|
printf("\nPointer to pointer: **p2 = %d\n", **p2);
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|