What is array to pointer decay?

It’s said that arrays “decay” into pointers. A C++ array declared as int numbers [5] cannot be re-pointed, i.e. you can’t say numbers = 0x5a5aff23. More importantly the term decay signifies loss of type and dimension; numbers decay into int* by losing the dimension information (count 5) and the type is not int [5] any … Read more

Pointers vs. values in parameters and return values

tl;dr: Methods using receiver pointers are common; the rule of thumb for receivers is, “If in doubt, use a pointer.” Slices, maps, channels, strings, function values, and interface values are implemented with pointers internally, and a pointer to them is often redundant. Elsewhere, use pointers for big structs or structs you’ll have to change, and … Read more

How many levels of pointers can we have?

The C standard specifies the lower limit: 5.2.4.1 Translation limits 276 The implementation shall be able to translate and execute at least one program that contains at least one instance of every one of the following limits: […] 279 — 12 pointer, array, and function declarators (in any combinations) modifying an arithmetic, structure, union, or … Read more

How does free know how much to free?

When you call malloc(), you specify the amount of memory to allocate. The amount of memory actually used is slightly more than this, and includes extra information that records (at least) how big the block is. You can’t (reliably) access that other information – and nor should you :-). When you call free(), it simply … Read more

Typedef function pointer?

typedef is a language construct that associates a name to a type. You use it the same way you would use the original type, for instance typedef int myinteger; typedef char *mystring; typedef void (*myfunc)(); using them like myinteger i; // is equivalent to int i; mystring s; // is the same as char *s; … Read more

What exactly is nullptr?

How is it a keyword and an instance of a type? This isn’t surprising. Both true and false are keywords and as literals they have a type ( bool ). nullptr is a pointer literal of type std::nullptr_t, and it’s a prvalue (you cannot take the address of it using &). 4.10 about pointer conversion … Read more