C array types are weird
28 points
1 day ago
| 4 comments
| anselmschueler.com
| HN
uecker
1 day ago
[-]
In practice, the [static n] notation can give you useful warnings and bounds checking.

https://godbolt.org/z/PzcjW4zKK

And while the (*array_ptr)[3] notation take a moment to get used to, it is very logical. If you have a pointer to an array, you dereference it first and then indx into it. Again, useful for bounds checking: https://godbolt.org/z/ao1so9KP7

reply
dnautics
35 minutes ago
[-]
What is **int[3][5]
reply
ori_b
5 minutes ago
[-]
a syntax error.
reply
the__alchemist
23 minutes ago
[-]
This is one of the things that I feel is an inappropriate abstraction that is around for historical reasons. When I do FFI to call C from rust, I usually wrap the generated API (Which is pointer based) into rust's &[] array syntax. Arrays/lists/Vecs etc in most non-C languages feel like an abstraction over a collection of items; I feel like C's exposing the pointer directly is taking a low-level memory/MMIO operation and inserting it into business logic. Conceptually, I like to keep them separate; pointers for writing drivers, accessing registers, writing to flash memory etc. Arrays/lists/vecs for higher level operations on collections.

Tangent: I have a pet theory that part of Zig's raison d'etre is to fix some of the problems with C, while accommodating its pointer-based data structures, and the resulting patterns.

reply
vulcan01
15 minutes ago
[-]
This talk – "Programming without pointers" – by Andrew Kelley may be interesting to you.

https://www.hytradboi.com/2025/05c72e39-c07e-41bc-ac40-85e83...

reply
fatty_patty89
38 minutes ago
[-]
there's no array type in c
reply
colejohnson66
27 minutes ago
[-]
Yes it does. It just decays to a pointer at the slightest touch.
reply
IncreasePosts
36 minutes ago
[-]
Paging walter bright
reply
glouwbug
34 minutes ago
[-]
C's biggest mistake.

But in other news most don't know that a[3] == 3[a]

reply