Указатель на двумерный массив
Учитывая следующий код:
int main()
{
static char wer[3][4] = {"bag","let","bud"};
char (*ptr)[4] = wer;
putchar(*(*(ptr+1)+2));
putchar(*(wer[1]+2));
putchar(*(ptr+1)+2);
return 0;
}
первый и второй оператор putchar() указывает на первый элемент 1-й строки, т.е. e
(рассматривая 0 как базовое местоположение), тогда как в 3-м выражении putchar() он показывает значение мусора.
Но, как говорится в заявлении, (*(ptr+1))
ясно означает, указывают на 2-й ряд. Почему так происходит?
Это из-за некоторых putchar()
норма, или я заканчиваю концепцию указателя?
1 ответ
Вы передаете неправильный тип putchar
в последней строке.
Тип (ptr+1)
является char (*)[4]
,
Тип *(ptr+1)
является char [4]
который разлагается на char*
,
Тип *(ptr+1)+2
является char*
,
Указатель преобразуется в какой-то странный int
, который объясняет вывод - или мусор, как вы выразились более четко.
В случае сомнений лучше упростить ваш код, чем задуматься о том, что происходит.
С помощью
char c = *(ptr+1)+2;
putchar(c);
мог бы выявить проблему раньше.