0 / 0 / 0
Регистрация: 24.10.2014
Сообщений: 9
|
||||||
1 | ||||||
Многомерные массивы и указатели10.04.2017, 19:48. Показов 2663. Ответов 7
ВЫВОД: zippo = 0060FEF0, zippo + 1 = 0060FEF8 zippo[0] = 0060FEF0, zippo[0] +1 = 0060FEF4 *zippo = 0060FEF0, *zippo +1 = 0060FEF4 zippo [0][0] = 2 *zippo[0] = 2 **zippo = 2 My &zippo[0] = 0060FEF0 My &zippo[0][0] = 0060FEF0 zippo[2][1]= 3 *(*(zippo +2) + 1) = 3 Это из одного учебника по Си, строчки с My я сам добавил. То есть zippo = &zippo[0]=0060FEF0, при этом zippo[0] тоже должен указывать на первый элемент, то есть и он равен 0060FEF0. Это вроде как означает, что zippo[0] указывает на место в памяти, где сам же и находится, хотя в том месте памяти должно находиться интовое значение zippo[0][0] = 2; Что я такое упускаю, что не могу разобраться?
0
|
10.04.2017, 19:48 | |
Ответы с готовыми решениями:
7
Указатели и многомерные массивы Многомерные массивы Как лучше задавать многомерные динамические массивы? Многомерные массивы символов, их описание и расположение в памяти |
5113 / 4552 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
|
|
10.04.2017, 20:02 | 2 |
Pavel081, zippo - адрес матрицы, zippo[0] - адрес первой строки матрицы.
Т.к. матрица начинается с первой строки, то и адрес первой строки совпадает с адресом матрицы. zippo[0][0] - элемент [0][0]
0
|
0 / 0 / 0
Регистрация: 24.10.2014
Сообщений: 9
|
|
10.04.2017, 20:11 [ТС] | 3 |
Да это наверное понятно, просто это пока мне не объясняет то , что по адресу 0060FEF0 должен находиться первый элемент массива, а судя по тому что &zippo[0] = 0060FEF0 , то в той ячейке находится zippo[0], которая вроде как является переменной - указателем на int(на первый элемент массива).
0
|
5113 / 4552 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
|
||||||
11.04.2017, 11:22 | 5 | |||||
Pavel081, приведенная ссылка как раз описывает Ваш случай, когда двумерный массив фактически строится, как линейный, одномерный, когда все элементы лежат один за другим. Так обычно задается матрица в глобальной либо локальной памяти на этапе компиляции.
Часто матрица строится динамически. В таком случае также можно запросить место все элементы и построить матрицу линейно. Но можно построить матрицу, как адрес адресов векторов. Когда сначала запрашиваем память под вектор, в которых будут адреса строк матрицы. Затем запрашиваем память под каждую строку. В таком случае элементы разных строк не будут лежать линейно. Преимуществом такого способа является то, что длины каждой строки вполне могут быть разной длины и могут постоянно меняться. Так, например, можно организовать массив строк... Именно в данном случае адреса zippo и zippo[0] будут разными. Вы думаете, что у Вас второй способ организации матрицы, а у Вас - первый - линейный... Добавлено через 31 минуту Второй способ:
0
|
0 / 0 / 0
Регистрация: 24.10.2014
Сообщений: 9
|
||||||
11.04.2017, 20:05 [ТС] | 6 | |||||
Про то как двумерный массив хранится как одномерный я схемы видел, но я нашел пример попроще, так как это распространяется и на одномерные массивы, даже рисунок добавлю для наглядности(ну как я это вижу)
код наверное избыточен, ну да ладно
0
|
5113 / 4552 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
|
|
12.04.2017, 10:43 | 7 |
Сообщение было отмечено Pavel081 как решение
Решение
да, имя массива - указатель на массив, но в случае линейного массива - не переменная! Значение указателя нигде не хранится. Его значение известно на этапе компиляции и просто подставляется везде, где используется!
1
|
0 / 0 / 0
Регистрация: 24.10.2014
Сообщений: 9
|
|
12.04.2017, 14:30 [ТС] | 8 |
Спасибо, подозревал такое, но в книге прямым текстом такого не писали
0
|
12.04.2017, 14:30 | |
12.04.2017, 14:30 | |
Помогаю со студенческими работами здесь
8
Массивы указателей и указатели на указатели Указатели и массивы Указатели и массивы Массивы и указатели в С для начинающих Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |