-
Point 1: Nested functions are not standard
C. They are supported as GCC extension.. -
Point 2:
printf("&b is:%s\n",&b);is wrong and invokes UB, because of improper format specifier. You need to change that toprintf("&b is:%p\n",(void *)&b); -
Point 3:
&(&a)is wrong. the operand for&needs to be an lvalue, not another address, which is not an lvalue.Related:
C11, chapterยง6.5.3.2, for the operand typeThe operand of the unary
&operator shall be either a function designator, the result of a[]or unary*operator, or an lvalue that designates an object that is not a bit-field and is not declared with the register storage-class specifier.and the return type
….result is not an lvalue.
solved No More Confusing Pointers