15 / 15 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
|
||||||
1 | ||||||
По. разобрать программу с указателями и массивами ( авторы Либерти, Дмитрий )25.09.2013, 14:22. Показов 1327. Ответов 3
Метки нет (Все метки)
Программа
В строках 26, 28 мы создаем массивы? С помощю getline мы вводим строку. И о чудо! я вижу, что теперь в массиве не 225 символов, а столько, сколько я вводил. bool GetWord(char* string, char* word, int& wordOffset) указатели на массив? int& нну забыл, и не сображу, это что? cout << "string[wordOffset]: " << string[wordOffset] << endl; ( стр.63 ) выводит 284 символа, причем сначала 4 строки бог знает каких символов и тут же без перехода введённую строку. char *p1, *p2; (стр.71) самая непонятка!!!!! Это же указатель. Вот мы ег обьявили p1 = p2 = string+wordOffset; Что же в нем хранится? Указатель? почему при прямом выводе выводится не адрес, а строка? Я ожидал, что так буде вывиден cout << "p1: " << p1 << endl;адрес, а так cout << "*p1: " <<*p1 << endl; строка, однако строка выводится прямо!! Мало того, при операции p1++; из строки сначала вычитается по символу на каждый шаг!! Как это???? Офигеть!!
0
|
25.09.2013, 14:22 | |
Ответы с готовыми решениями:
3
Разобрать код с указателями Разобрать код, демонстрирующий работу с указателями Работа с массивами и указателями Работа с массивами/указателями |
147 / 82 / 10
Регистрация: 04.09.2013
Сообщений: 261
|
|
25.09.2013, 16:09 | 2 |
Не по теме: Ох же блин и выводов на экран тут. наверное для дебага строка выше опять таки string это ведь тоже указатель и хранит в себе адрес памяти где начинается строка. Соответственно мы знаем, что char занимает 1 байт памяти, поэтому string+wordOffset по сути эквивалентно &string[wordOffset] т.е. адрес смещенный в строке. По такому-же принципу p1++ производит смещение на 1 символ
1
|
15 / 15 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
|
||||||
25.09.2013, 18:44 [ТС] | 3 | |||||
Спасибо!!!!!
Добавлено через 1 час 57 минут Вобще не понял где ошибка.
1>d:\проги\widelenyeslovmassiva\widelenyeslovmassiva\widelenyeslovmassiva.cpp(38 ): error C2143: синтаксическая ошибка: отсутствие ")" перед "константа" 1>d:\проги\widelenyeslovmassiva\widelenyeslovmassiva\widelenyeslovmassiva.cpp(38 ): error C2059: синтаксическая ошибка: ) 1>d:\проги\widelenyeslovmassiva\widelenyeslovmassiva\widelenyeslovmassiva.cpp(39 ): error C2143: синтаксическая ошибка: отсутствие ";" перед "{" 1>d:\проги\widelenyeslovmassiva\widelenyeslovmassiva\widelenyeslovmassiva.cpp(39 ): error C2065: i: необъявленный идентификатор 1>d:\проги\widelenyeslovmassiva\widelenyeslovmassiva\widelenyeslovmassiva.cpp(47 ): error C2065: i: необъявленный идентификатор 1> Выход из команды с кодом "2". Добавлено через 25 минут Логика вопроса. Мы допустим обьявили переменную как ссылку, но поместили в нее не ссылку на массив, а массив. Не так sprobuem=&buffer; а так sprobuem=buffer;. Положим, в ней лежит как-бы то ни было массив. Как мы тогда с ним работаем так p1++; сдвигая пошагово? Или проще не заморачиваться а пытаться использовать, в дальнейшем?
0
|
147 / 82 / 10
Регистрация: 04.09.2013
Сообщений: 261
|
||||||
26.09.2013, 11:31 | 4 | |||||
я бы сказал там нулик лишний в конце после ++
Смотри ссылки и указатели это по сути переменные типа лонг, в которых хранится адрес памяти по которому лежат какие-то данные. Соответственно ожидаемый тип данных мы указываем при определении указателя. т.е. char *c означает что в переменной с будет находится адрес памяти по которому мы ожидаем считать значение типа чар. Таким образом по идее код не должен работать, т.к. у тебя тип данных указатель на чар, а ты передаешь адрес памяти указателя на чар, т.е получаешь указатель на указатель чар. Логика пока понятна думаю. Теперь допустим у тебя в коде получается
Т.ч. на самом деле лучше арифметические операции с указателями не делать, лучше пользоваться механизмом индексации типизированных указателей. Ссылки и указатели свою суть хранят в названии они не хранят данные они хранят в себе информацию о том где эти данные брать.
1
|
26.09.2013, 11:31 | |
26.09.2013, 11:31 | |
Помогаю со студенческими работами здесь
4
Связь между указателями и массивами Работа с указателями/массивами /функциями Работа с массивами, указателями и функциями. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |