Ответ 1
Да, оба одинаковы.
В этом случае имя массива распадается на указатель на его первый элемент.
Следовательно,
p = numbers; //Name of the array
совпадает с:
p = &numbers[0]; //Address of the First Element of the Array
int numbers[20];
int * p;
Являются ли два назначения ниже одного?
p = numbers;
p = &numbers[0];
Да, оба одинаковы.
В этом случае имя массива распадается на указатель на его первый элемент.
Следовательно,
p = numbers; //Name of the array
совпадает с:
p = &numbers[0]; //Address of the First Element of the Array
Да, они одинаковы. Когда имя массива вызывается в контексте rvalue, оно распадается на указатель на его первый элемент.
numbers[0] is equal to *number and equal to *(number+0)
numbers[x] = *(number+x)
so & (* (number + x)) = number + x, который является адресом x'th элемента