eolas/zk/Pointers_in_C.md

40 lines
776 B
Markdown
Raw Normal View History

2025-12-15 17:26:02 +00:00
---
tags:
- C
---
A pointer is a reference to the address of a variable in memory.
```c
2026-01-19 17:06:41 +00:00
int x = 27;
int *ptr = &x;
2025-12-15 17:26:02 +00:00
2026-01-19 17:06:41 +00:00
printf("%i\n", x);
2025-12-15 17:26:02 +00:00
// 27
2026-01-19 17:06:41 +00:00
printf("%p\n", *ptr);
2025-12-15 17:26:02 +00:00
// 0x7ffeb44f7eac
```
2026-01-19 17:06:41 +00:00
The `&` and `*` is frankly confusing.
2025-12-15 17:26:02 +00:00
2026-01-19 17:06:41 +00:00
In the previous example, `int *ptr = &x`, `ptr` is a variable that holds the
memory address of `x`. `*` signals that it is a pointer variable, `&` is what
does the retrieval.
2025-12-15 17:26:02 +00:00
2026-01-19 17:06:41 +00:00
In the following:
2025-12-15 17:26:02 +00:00
```c
2026-01-19 17:06:41 +00:00
int x = 27;
int *ptr = &x;
int value = *ptr;
2025-12-15 17:26:02 +00:00
```
2026-01-19 17:06:41 +00:00
We again set `ptr` to the memory address of `x`, but we use `*` on the last line
to **de-reference** the pointer and get the original value back. Thus `value`
becomes equal to `27`.
2025-12-15 17:26:02 +00:00
2026-01-19 17:06:41 +00:00
Pointers are necessary because C uses a [call by value](./C_is_call_by_value.md)
system for function arguments.