Поиск элемента в двумерном массиве stati c без использования оператора [] - PullRequest
0 голосов
/ 03 апреля 2020

С учетом данных c 2 С учетом массива данных c 2-D следующим образом:

int m[4][6];

Как получить доступ к m[2][4] без использования оператора []?

Ответы [ 3 ]

0 голосов
/ 03 апреля 2020

Чтобы получить элемент arr[i][j], используя указатели arithemiti c, увеличьте указатель, указывающий на первый массив внутренних массивов, на i, разыменуйте его, чтобы получить указатель, указывающий на первый элемент i-го внутреннего массива , затем увеличьте указатель, указывающий на первый элемент i-го внутреннего массива, на j, окончательно разыменуйте результат

m[2][4] === *(*(m+2)+4)
0 голосов
/ 03 апреля 2020

Звучит как классический указатель для меня.

Попробуйте использовать адрес m и некоторую арифметику указателя c.

int main(){
    int m[4][6];
    m[2][4] = 42; // Using [] only for testing

    int x = *(*(m + 2) + 4);
    printf("%d\n", x);
}
0 голосов
/ 03 апреля 2020

Сделайте это:

*(*(m+2) + 4)

Это то, что действительно делает оператор [], здесь массив будет dacay к указателю.

краткое объяснение этого:

в *(m+2), m используется в качестве значения int(*)[4], указывающего на первую "строку" m, затем разыменовывая m+2, получают ссылку на 1D массив третьего "row".

Затем этот результат уменьшается до int* prvalue снова, указывая на первый элемент третьей "строки", затем разыменовывая this_value + 4, мы успешно получаем 5-й элемент 3-й строки, это точный результат, который вы получите, используя m[2][4].

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