Discussion about C array type semantics
The article discusses the peculiarities of C array types and their semantics. It highlights how array types are treated as pointers in many contexts, which can lead to confusion. The author suggests that a clearer distinction between arrays and pointers could simplify understanding for learners.
- ▪In C, an array type T[n] is distinct from a pointer type T *, but expressions of type T[n] convert to a pointer to the first element.
- ▪The sizeof operator behaves differently for arrays and pointers, leading to potential discrepancies in size calculations.
- ▪Function signatures interpret array types as pointers, discarding the size information, which complicates their usage.
Opening excerpt (first ~120 words) tap to expand
C array types are weird In this article I’ll explain what I find weird about them, what I’d do differently, and ramble on a few related things. Technically speaking, an array type T[n] (for some n) is distinct from a pointer type T *. A value of type T[n] represents a contiguous sequence of T values in memory, n long. But you can’t actually refer to values of type T[n]. Any expression that would be of that type is immediately converted to a pointer, type T *, namely a pointer to the first element. Since the array indexing operator arr[ix] actually operates on pointers, acting like *(arr + ix), you can basically treat arrays like pointers. An important instance where this doesn’t happen is in sizeof arr, which returns sizeof(T) × n.
…
Excerpt limited to ~120 words for fair-use compliance. The full article is at Anselmschueler.