OriginalGriff
Это сложно, но это связано с тем, какой тип multi
является.
Это что же такое char
- Нет, очевидно, нет.
является ли это указателем на a char
- Нет.
Так в чем же дело?
multi
это массив из трех элементов, каждый из которых представляет собой массив из 10 элементов. char
ценности.
Так что же такое, черт возьми, "мульти + 3"? по сути, это незаконный адрес, который оказывается в пределах допустимого пространства памяти потому что multi
имеет только три элемента: multi
+ 0, multi
+ 1, и multi
+ 2.
И поскольку вы вообще не инициализируете свой массив, значение "multi
+ 3", скорее всего, будет первым значением фактического значения. char
данные в системе multi[0]
время char
s, что, вероятно, - но не определенно, это зависит от вашего компилятора и параметров компилятора - 0.
В принципе, не делайте этого.
Попробуйте сделать это с действительными адресами, и вы получите разные результаты, как и следовало ожидать.
Member 13941117
К сожалению, мой плохой. Многомерный массив multi должен был быть объявлен как char multi[5][10], а не multi[3][10]. Таким образом, multi + 3 и *(multi + 3) указывали в пределах выделения памяти multi. Так что мой вопрос не совсем такой, как был задан ранее. И я все еще удивляюсь, почему у них один и тот же адрес. Или даже почему *(multi + 3) - это адрес.
Member 13941117
Моя программа была такова. Обратите внимание на те же адреса при запуске.
#включить <stdio.h>
// char multi[5][10];
char multi[5][10] = {
{'0','1','2','3','4','5','6','7','8','9'},
{'А','Б','С','Д','Е','е','г','ч','я','ж'},
{'А','Б','С','Д','Е','Е','Г','Ч','Я','Ж'},
{'9','8','7','6','5','4','3','2','1','0'},
{С'J','Я','Ч','Г','Е','Е','Д','С','Б','А'}
};
тап_п() {
printf("адрес 9 в четвертой строке - %p\n",&multi[3][0]);
printf("адрес 9 в четвертой строке - %p\n",multi + 3);
printf("адрес 9 в четвертой строке - %p\n",*(multi + 3));
printf("\n\n");
printf("значение в multi[3][0] равно %c\n",multi[3][0]);
printf("значение в multi[3][0] равно %c\n", *(*(multi + 3) + 0));
функции printf("в vvlue от мульти[3][0] - это %с\п",*(*(мульти + 3)));
for (int i = 0; i < 10; i++)
printf("%c",*(*(multi+3) + i));
printf("\n");
}