3 ms·
Arrays and pointers in C already have that int. That's why sizeof() works. The issue is an extra if statement on every single array and pointer access.
by AReallyGoodName 10y ago
Arrays and pointers in C already have that int. That's why sizeof() works. The issue is an extra if statement on every single array and pointer access.
- dbaupp 10y agoThey don't, sizeof is a compile-time constant. On a pointer, sizeof() just reports the size of the pointer itself (i.e. 4 or 8 bytes on most modern platforms), not the size of the data to which it points (and sizeof(*pointer) reports the size of the type to which pointer points, it doesn't know anything about how many values of that type are stored). For an array, the length is known statically (i.e. it's in the type), and so the computation can be done at compile time.
- steveklabnik 10y agoAnd this is such a misconception that it's often cited as a footgun: http://www.cplusplus.com/faq/sequences/arrays/sizeof-array/ http://www.cplusplus.com/faq/sequences/arrays/sizeof-array/ > A beginner will often try something along the lines of size = sizeof( myarray ) (which is incorrect).
- caf 10y agosizeof isn't always a compile-time constant: if it's applied to variably-modified type, it's not (obviously).
- dbaupp 10y agoOh, yes, I'd forgotten about VLAs... Compile-time constant, except for sometimes.