Remix.run Logo
C array types are weird(anselmschueler.com)
38 points by signa11 2 days ago | 17 comments
uecker 2 days ago | parent | next [-]

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

keyle 20 minutes ago | parent | next [-]

I know of this notations but I don't see many people using [static n].

Not sure why, maybe it doesn't feel like C anymore, maybe it feels hacky?

typically if you're passed an array you'd want to get more anyway, so you'd get passed a struct. Not sure.

dnautics an hour ago | parent | prev [-]

What is **int[3][5]

ori_b an hour ago | parent [-]

a syntax error.

ori_b 37 minutes ago | parent [-]

And if you want 'int **a[a][b]', it's a value that when you say 'x = **a[m][n]', will evaluate to an int and assign it to x. Postfix has higher precedence than prefix.

the__alchemist an hour ago | parent | prev | next [-]

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.

vulcan01 an hour ago | parent [-]

This talk – "Programming without pointers" – by Andrew Kelley may be interesting to you.

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

throwaway27448 19 minutes ago | parent [-]

Learning to program with pointers is enormously useful. It's simply bad software engineering to not use typing to enforce constraints on access to pointers (or addresses, or however you'd like to term them)

fatty_patty89 an hour ago | parent | prev | next [-]

there's no array type in c

colejohnson66 an hour ago | parent [-]

Yes it does. It just decays to a pointer at the slightest touch.

throwaway27448 21 minutes ago | parent [-]

So why are we discussing it

IncreasePosts an hour ago | parent | prev | next [-]

Paging walter bright

glouwbug an hour ago | parent [-]

C's biggest mistake.

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

throwaway27448 21 minutes ago | parent [-]

Even more irrelevant than the array type

throwaway27448 22 minutes ago | parent | prev [-]

Why are we still discussing c in 2026? Why are you intentionally hamstringing yourself unless you're using fucking hp-ux

cartoonfoxes 7 minutes ago | parent [-]

https://www.tiobe.com/tiobe-index/

mianos 3 minutes ago | parent [-]

p.s. in case you don't want to follow the link, number 2 on the list