Просто, когда я расслабился, у меня есть ясное понимание указателей в контексте массивов, я упал лицом вниз по этой следующей программе. Я понял, как для массива arr
, arr
и &arr
оба одинаковы по величине, но различны по типу, но я не могу получить твердую хватку над выходом следующей программы. Я пытаюсь визуализировать ее, но добиваюсь только частично. Я был бы признателен, если бы вы могли дать строгий и подробный объяснение этой вещи, чтобы такие ребята, как я, могли с этой путаницей навсегда.Для «int demo [4] [2]», почему все они одинаковы по величине: & demo [1], demo [1], demo + 1, * (demo + 1)? Что относительно типа?
В следующей программе, я использовал «2D» массив demo[][2]
.Я знаю, что demo[]
будет array of arrays
размера 2.I также знаю, что demo
используется только будет иметь тип (*)[2]
.Still Я в недоумении о следующем:?
1) почему &demo[1]
так же, как demo[1]
demo[1]
не должен быть адрес второго массива Что на земле &demo[1]
тогда и почему его так же, как адрес второго массива ?
2) Я знаю, что второй printf()
и четвёртый такой же, как и demo[1]
не что иное, как *(demo+1)
.Но я использовал его так, чтобы проиллюстрировать эту point.How она может быть равна третьей printf()
, т.е. , как может демо + 1 быть равно * (демо + 1)? demo[1]
такой же, как *(demo+1)
, хорошо известен, но как может demo+1
быть равным *(demo+1)
? Как «что-то» может быть равно значению в этом «что-то»?
3) И так как это просто оказалось, я не очень умным, я должен остановить мою угадайку и спрашивать убедительный ответ о том, что является типы для следующего:
& демо [1]
демонстрационных [1]
демонстрационных +-
#include<stdio.h>
int main(void)
{
int demo[4][2]= {{13,45},{83,34},{4,8},{234,934}};
printf("%p\n",&demo[1]);
printf("%p\n",demo[1]); //Should have cast to (void*),but works still
printf("%p\n",demo+1);
printf("%p\n",*(demo+1));
}
ВЫВОД:
0023FF28
0023FF28
0023FF28
0023FF28
** Поиск ** * demo [1] дает 83, элемент 2-го массива. –