Почему я не могу рассматривать массив как указатель в C?

Я вижу этот вопрос много на SO. Может быть, не так много слов ... но снова и снова возникает путаница, как массивы отличаются от указателей. Поэтому я подумал, что уделю минутку Q & A нескольким пунктам по этому поводу.

Для целей этого Q & A мы предполагаем, что используется 32-битная система, и было объявлено следующее:

char * ptr = "hello";
char arr[10] = "hello";
int iarr[10] = {0};

Вот список вопросов, которые предполагают путаницу, которую я вижу в SO. Когда я увижу новые, я добавлю их в свой список вопросов и ответов (другие тоже не стесняются, и исправьте меня, если увидите ошибки!)

Isn't a pointer and an array basically the same thing? Follow up: both *(ptr) and *(arr), or ptr[0] and arr[0] give the same thing, why? How come arr and &arr is the same value? Follow up: why do I get a different value printing arr+1 vs &arr+1?

Ответы на вопрос(1)

Ваш ответ на вопрос