The following array and pointer extensions are supported:
Assignment and pointer differences are permitted
between pointers to types that are interchangeable but not identical,
for example, unsigned char * and char *.
This includes pointers to same-sized integral types, typically, int
* and long *. A warning is issued.
Assignment of a string constant to a pointer to any kind of
character is permitted without a warning.
Assignment of pointer types is permitted in cases
where the destination type has added type qualifiers that are not
at the top level, for example, assigning int ** to const
int **. Comparisons and pointer difference of such pairs
of pointer types are also permitted. A warning is issued.
In operations on pointers, a pointer to void is
always implicitly converted to another type if necessary. Also,
a null pointer constant is always implicitly converted to a null
pointer of the right type if necessary. In ISO C, some operators
permit these, and others do not.
Pointers to different function types can be assigned
or compared for equality (==) or inequality (!=)
without an explicit type cast. A warning or error is issued.
This extension is prohibited in C++ mode.
A pointer to void can be implicitly
converted to, or from, a pointer to a function type.
In an initializer, a pointer constant value can
be cast to an integral type if the integral type is big enough to
contain it.
A non lvalue array expression is converted to a
pointer to the first element of the array when it is subscripted
or similarly used.
This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.
ARM websites use two types of cookie: (1) those that enable the site to function and perform as required; and (2) analytical cookies which anonymously track visitors only while using the site. If you are not happy with this use of these cookies please review our Privacy Policy to learn how they can be disabled. By disabling cookies some features of the site will not work.