Указатель C для 2-мерного массива - PullRequest
1 голос
/ 30 января 2012

Уже объявлен массив, такой как:

char ma[10][20];

Адрес определенного элемента получается с помощью:

p = &ma[1][18];

На какой элемент p будет указывать после p++;?

Ответы [ 3 ]

2 голосов
/ 30 января 2012

Добавив 1 к адресу члена массива, получите адрес следующего члена.поскольку p является адресом ma[1][18], который является членом массива ma[1], p+1 является адресом ma[1][19].(И, конечно же, p++; похоже на p=p+1;)

Правка: я предположил, конечно, что p равно char*.Если это что-то еще, ответ может быть другим.

1 голос
/ 30 января 2012

p++ выход &ma[1][19]

Вот объяснение:

char ma[10][20];
char *p = &ma[1][18];

p значение равно &ma[1][18], что равно *(ma + 1) + 18.

То есть значение p++, равное p + 1, равно (*(ma + 1) + 18) + 1, равно *(ma + 1) + 19, что равно &ma[1][19].

0 голосов
/ 30 января 2012

Вы не указываете тип p; если предположить, что это char *, то p++ увеличит его до ma[1][19] (1 символ).

Вот несколько вариантов:

char (*p)[20] = &ma[1];

В этом случае p - это указатель на массив из 20 элементов char, инициализированный для указания на ma[1]; выполнение p++ продвинет p, чтобы указать на ma[2] (20 символов).

char (*p)[10][20] = &ma;

В этом случае p - это указатель на 10-элементный массив из 20-элементных массивов char, инициализированный для указания на ma; выполнение p++ продвинет p к следующему элементу сразу после ma (200 символов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...