Everyone knows that the name of the array is the address of the first element in the array, but it would have been so easy if not taking the address from the name of the array.
There is such an array declaration: char array[] = "String";
If we write: array or &array[0] - we get the address of the first element in the array, the first option is implicit, the second is explicit.
I thought, hmm, but what if I write &array - at first glance, nothing strange is the same address as array or &array[0] , but if you dug deeper, i.e., &array+1 , we will see that the address will increase in length lines (for me it is strange, I have never seen it, except in the parameters, when the argument was a pointer to an array of elements of a certain number, just like now)
I wonder if there is an alternative to this behavior ( &array )? So far I have thought of this way: (char (*)[sizeof(array)])array - but is this correct?
In addition, the following behavior is interesting: If we write *array we get an array element exactly like array[0] , but if we write *(&array) - we don't get an array element, we get the same address that points to the first element , but with the only difference that its address arithmetic fell from a whole array to one character.
Is it possible to say that in this case it is a pointer change to the level of a pointer to a character (such a kind of pointer downgrade)?
And what happens to an array when we write *(&array) in your opinion?