10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
|
||||||
1 | ||||||
Вопрос про указатели на массивы11.03.2010, 14:20. Просмотров 887. Ответов 16
Метки нет Все метки)
(
В книге написано
Хотя второй вариант работает. p = &(a+0)
0
|
|
11.03.2010, 14:20 | |
Вопрос про указатели Вопрос про указатели
Про указатели, массивы, new/delete и красивости /* удалить/вставить в массив */ |
|
26 / 26 / 11
Регистрация: 03.11.2009
Сообщений: 158
|
|
11.03.2010, 14:25 | 2 |
так как
p присваивается адрес указателя на массив целых чисел... ошибка потому , чтоб её не было надо сделать так int **p
0
|
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
|
|
11.03.2010, 14:32 [ТС] | 3 |
Имя массива - указатель на память.
int a[5]; int *p; p = a; //Присвоили адрес т.к a хранит адрес на память где храняться числа. p = &a; //Адрес из адреса???
0
|
26 / 26 / 11
Регистрация: 03.11.2009
Сообщений: 158
|
|
11.03.2010, 14:41 | 4 |
ну правильно имя массива - указатель на кусок памяти под этот массив, &- операция взятия адреса, поэтому ты берешь адрес ячейки, в которой написан адрес массива
0
|
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
|
|
11.03.2010, 14:45 [ТС] | 5 |
0
|
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
|
|
11.03.2010, 15:56 | 6 |
0
|
1258 / 796 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|
11.03.2010, 19:03 | 7 |
Имя p можно использовать так же как и a: p[0]=2 p[1] и т д.
0
|
372 / 286 / 97
Регистрация: 17.12.2009
Сообщений: 567
|
||||||
11.03.2010, 19:05 | 8 | |||||
все еще проще: имя массива выступает в роли ссылки не его первый элемент. этого достаточно. )
&m[0] - это адрес первого (нулевого) элемента. он равено просто m &m[0] тождественно равно m;
переменная - имя ячейки. указатель имя ячейки, в которой лежит адрес переменной & - оперптор взятия адреса своего операнда. & от указателя вернет адрес ячейки в которой лежит адрес ячейки, т.е. адрес указателя * это оператор перехода по адресу который содержит его операнд. * от указателя вернет то что указывает его содержимое. т.е операнд на который указывает указатель. кстати, можно брать адрес любого элемента. &m[i] - адрес i-ого элемента. оператор [] имеет более высокий приоритет чем оператор &, посему сначало выполняется "выбор" элемента потом взятие его адреса.проде как &(m[i]) еще следует помнить что такие массивы располагаются в памяти последовательно. каждый элемент - один за другим. [0|1|2|3|4|5|6] так что (&m+2) - это элменет с индексом 2.
1
|
1258 / 796 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|
11.03.2010, 19:08 | 9 |
В данном случае этот тезис не подходит так как если делать & мы берем адрес указателя на начало массива и не адрес начала массива. Добавлено через 2 минуты Krist_ALL вот тебе ссылка, увидев это ты удивишься: Бесконечность и далее...
0
|
372 / 286 / 97
Регистрация: 17.12.2009
Сообщений: 567
|
|
11.03.2010, 19:09 | 10 |
с массивами исключение. вообще я это все сказал для образного понимания дела
0
|
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
|
|
11.03.2010, 20:35 [ТС] | 11 |
int a[20];
int *p; p = a; p присвоили АДРЕС ПЕРВОГО элемента массива да? p = &a; Адрес адреса получается.. т.к. &-взятие адреса от а(0х123456) непойму
0
|
372 / 286 / 97
Регистрация: 17.12.2009
Сообщений: 567
|
||||||
11.03.2010, 20:49 | 12 | |||||
да так и есть
&a и a это одно и тоже. только так: p=&a компилятор не разрешает. a - адрес первого элемента в массиве, он совпадает с адресом самого массива - это логично. массив: [0|1|2|3|4|5] ^ первый элемент, онже начано массива. почитай предисловие и введение к книжке по ассемблеру тогда тебе точно станет ясно доконца. обращаться к i-тому элементу так например: *(a+i)
имя_типа ИМЯ_МАССИВА[размер_массива]; или так: имя_типа * ИМЯ_УКАЗАТЕЛЯ=new ИМЯ_ТИПА[размер_массива]; все это располагается в памяти непрерывно, последовательно. И & взятие дреса того что после него написано. * разименование адреса того что после него написано
0
|
1258 / 796 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
||||||
11.03.2010, 21:18 | 13 | |||||
0
|
372 / 286 / 97
Регистрация: 17.12.2009
Сообщений: 567
|
||||||
11.03.2010, 21:24 | 14 | |||||
одно одно )))
1
|
быдлокодер
1720 / 907 / 106
Регистрация: 04.06.2008
Сообщений: 5,618
|
|
11.03.2010, 21:28 | 15 |
0
|
1258 / 796 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
||||||
11.03.2010, 21:35 | 16 | |||||
//Такие эксперименты я не делал, интересный закон, для массивов.
1
|
быдлокодер
1720 / 907 / 106
Регистрация: 04.06.2008
Сообщений: 5,618
|
|
11.03.2010, 21:40 | 17 |
И прекращайте называть нулевой элемент первым.
Добавлено через 3 минуты НУ вот как раз в той теме, ссылку на которую я дал ребята подробным образом всё это объясняют! Почему значение переменной равно адресу переменной (речь идёт о массивах, понятно)
1
|
11.03.2010, 21:40 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь. Вопрос по программе на тему: Массивы и указатели. Динамическое выделение памяти Отсортировать массив и вывести на экран (массивы и указатели на указатели) Указатели и массивы. Индексация с помощью указателей. Передача массивов в функции. Динамические массивы (обработка матриц)
Указатели и массивы. Указатели и функции Структуры, массивы, указатели, динамические массивы структур Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |