0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
|
||||||
1 | ||||||
Указатель, как массив10.08.2013, 13:15. Показов 2498. Ответов 32
Метки нет (Все метки)
Объясните, пожалуйста, каким образом в 10-ой строке указатель pType ведет себя как массив?
0
|
10.08.2013, 13:15 | |
Ответы с готовыми решениями:
32
Реализовать 3 функции, каждая из которых принимает указатель на массив и количество элементов и возвращает указатель на новый массив. Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив) Как получить ссылку на указатель или указатель на указатель в массиве? Указатель на функцию, которая принимает в качестве параметра указатель на массив |
433 / 368 / 149
Регистрация: 06.08.2012
Сообщений: 961
|
|
10.08.2013, 13:22 | 2 |
1
|
погромист
415 / 251 / 30
Регистрация: 27.08.2012
Сообщений: 550
|
|
10.08.2013, 13:31 | 3 |
1
|
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
|
|
10.08.2013, 13:33 [ТС] | 4 |
0
|
погромист
415 / 251 / 30
Регистрация: 27.08.2012
Сообщений: 550
|
|
10.08.2013, 13:36 | 5 |
pType -- указатель. Offset -- смещение на n-количество байт. * -- возвращает элемент в памяти, адрес которого pType + offset
1
|
7 / 7 / 3
Регистрация: 11.08.2013
Сообщений: 33
|
||||||
11.08.2013, 14:11 | 7 | |||||
Указатель как массив.
1 Создание массива на основе указателя :
Она принемает знечение идекс int offSet и возращает значение pType[offSet].
0
|
Ушел с форума
|
||||||
11.08.2013, 14:22 | 8 | |||||
Сообщение было отмечено как решение
Решение
Когда указатель ведет себя как массив - это еще полбеды.
Хуже, когда массив начинает притворяться указателем:
3
|
Комп_Оратор)
|
|
11.08.2013, 14:40 | 9 |
Массив это встроенный в язык обобщённый тип. Указатель тоже. Они могут быть любого типа (совместимость не полная, так как не может быть, например, массивов void, а указатели на void, - могут)) и оба поддерживают индексное обращение. Имя массива преобразуется к указателю на первый элемент в выражениях, где ожидается указатель. В 10 строке указатель на начало массива индексируется также, как это происходило бы с именем массива. В этом смысле можно говорить о похожем "поведении". А вообще, согласен с :
2
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||||||
12.08.2013, 00:28 | 10 | |||||
Убежденный, так он и не притворяется. Это и есть отдельный указатель. В параметрах функции ( T [] ) эквивалентно ( T * ). То есть такой код вполне валидный:
1
|
Комп_Оратор)
|
||||||
12.08.2013, 01:11 | 11 | |||||
Это все-таки не обыкновенный указатель.
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
12.08.2013, 01:14 | 12 |
IGPIGP, мы говорим о разных вещах. Имя массива ни в коем случае не является указателем. Оно лишь может быть не явно преобразовано в указатель. Я же говорю о параметрах функции.
void f( T [] ) == void f( T * )
0
|
Комп_Оратор)
|
|
12.08.2013, 01:54 | 13 |
А-а, понял. Вы имели в виду, что в объявленном как массив параметре фактически указатель.
Что же, может для [TC] с вопросом о "поведении" будет интересно увидеть разные примеры. И то, что имя массива преобразуется к значению указателя на первый элемент, когда это правостороннее значение, тоже пригодится. Добавлено через 12 минут Пример Убежденный похоже о том, что частенько спрашивают. То есть, фактически: Почему размер массива делённый на размер типа не равен размерности массива? При этом делят размер указателя. И он же и имел в виду, что фактически sizeof будет применён к указателю. С соответствующим результатом.
1
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||
12.08.2013, 10:21 | 14 | |||||
Если всё же хочется передавать массив в функцию и иметь возможность вычислять при этом размер, можно воспользоваться шаблонами:
1
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||||||
12.08.2013, 11:05 | 15 | |||||
Tulosba, Смысла тогда нет вычислять размер А так можно вообще полностью шаблонную функцию сделать:
1
|
Jupiter
|
12.08.2013, 12:10
#17
|
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
12.08.2013, 12:11 | 18 |
Jupiter, никогда. Это просто для читаемости.
0
|
Jupiter
|
12.08.2013, 12:12
#19
|
0
|
Ушел с форума
|
|
12.08.2013, 12:59 | 20 |
Все верно подмечено. Я говорил о том, что плохо, когда массив притворяется указателем, хотя в
приведенном примере он и является указателем, просто в параметрах функции выглядит как массив. Это может сбить с толку и привести к ошибкам. Например, когда используются шаблоны и истинный тип скрыт.
1
|
12.08.2013, 12:59 | |
12.08.2013, 12:59 | |
Помогаю со студенческими работами здесь
20
Как сделать указатель на массив Как объявить указатель на массив? Как объявить указатель на массив через typedef и как инициализировать такой тип Как передать массив через указатель? Как заставить массив превратиться в указатель? Как обьявить указатель на двумерный массив? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |