Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Ссылки vs Указатели - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ return *this; http://www.cyberforum.ru/cpp-beginners/thread621961.html
return *this; Возвращает само себя?
C++ Выключение компьютера Мне нужно выключить компьютер. Операционная система Windows 7. У меня есть вот такой код: HANDLE hToken; TOKEN_PRIVILEGES* NewState; OpenProcessToken (GetCurrentProcess (),... http://www.cyberforum.ru/cpp-beginners/thread621953.html
#progma data_seg() , как поместить функцию? C++
#pragma data_seg(".OneSection") char UserName="Ghost Rider"; char Password="12345"; вот так все нормально записывает в секцию а вот если так писать: #pragma data_seg(".OneSection")
C++ Записывание в структуру из файла
Добрый день! У меня проблема с записью из файла bla-bla.txt в структуру.char d; // Массив символов для пробелов struct time { char s; char name; char year; } m; FILE *fd;...
C++ Постепенно прибавлять единицу к элементам матрицы http://www.cyberforum.ru/cpp-beginners/thread621913.html
Помогите ,дорогие Форумчане! Нужно прибавлять единицу к матрице постепенно 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0
C++ Стек в два стека Здравствуйте!! Нужно создать стек в диапазоне -50 до 50.Преобразовать стек в два стека.Причем, первый должен содержать только чётные числа,второй - только нечётные. Ни разу не работала со... подробнее

Показать сообщение отдельно
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6486 / 3130 / 307
Регистрация: 04.12.2011
Сообщений: 8,644
Записей в блоге: 5
14.07.2012, 17:12
Цитата Сообщение от silent_1991 Посмотреть сообщение
А здесь видно (с учётом той же контекстной зависимости), что a и b - сами по себе указатели.
Имеете в виду что объявления объектов где то рядом? Но это же не всегда и так. Если в контексте вопроса, то не видно ничего, что бы отличало эту функцию от любой другой принимающей в формальные параметры переменные по именам.
Самый сильный контекст это сигнатура и alex_x_x прав, на мой взгляд. Вопрос [ТС] интересен для меня в широком смысле. Не только при передаче в функцию. Тем более, что и ссылка и указатель в функцию копию не передаёт.
Тут хотелось бы поддержать Avazart, в том, что терминология не только запутана, но и противоречива. Противоречия не в логике, а именно в том как это звучит. Такое наблюдается, кстати, во многих более или менее обособленных отраслях знания. Опытные программисты часто не могут понять, что именно непонятно новичкам. В частности это касается указателей и ссылок. Когда впервые сталкиваешься с этим вопросом волосы встают дыбом. Б. Страуструп постоянно оговаривает, что синтаксис указателей - дань совместимости с С...
C++
1
2
3
4
int * a, *b, c;//объявление
a=&c;// присваивание адреса переменной
*a=c; //доступ c разименованием - присваивание значения
b=a; //присваивание
и это - цветочки, по сравнению с объявлением сложных типов, читаемых изнутри - наружу...
Для устранения, части неудобств работы с указателями при передаче в функцию (в основном) придуман специальный случай - ссылка. О ссылках и указателях выше сказано уже много.
Трудности восприятия синтаксиса, тема уходящая в С и сама по себе интересна, но мне хочется затронуть терминологию связанную с передачей аргументов в функцию, т.к. так поставлен вопрос в теме.
Имя - идентификатор для программиста. Компилятор пользуется целыми числами. То есть простое объявление и определение:
C++
1
int a=1;
связывает с некоторой областью памяти (4 байта на 32 системе) указатель, память заполняется единицей, с указателем связывается имя a. Имя нужно компилятору в исходнике, что бы генерировать код. В коде используется указатель. При этом в зависимости от того rvalue или lvalue представляет из себя а встреченное компилятором в каждом конкретном случае, код генерируется разный.
В C/C++ у программиста есть возможность получить доступ к памяти путём создания отдельной переменной хранящей адрес (номер байта), где расположено значение простой переменной (a). Эта переменная - указатель. Её можно объявить и связать с ней имя:
C++
1
int * pa=&a;//pa - имя переменной "указатель"
Интересно вот,что. Когда в функцию передается a, то принято говорить, что передаётся значение. Хотя передаётся копия! Когда же в функцию передаётся pa, то есть, непосредственно адрес переменной a, позволяющий сделать с a все, что угодно, - говорят, что передача - косвенная! Внутри машины это не так! Эта "косвенная" передача прямее и быстрее чем "по значению"! Она то и передаёт значение, в отличие от передачи по имени! Но есть устоявшаяся терминология и спорить с ней - безумие. Я и не спорю. Боже упаси. Однако для людей которые только начинают учить C++, может оказаться полезным взглянуть на эту терминологию прямо, а не косвенно.
Может и вредно оказаться тоже, - кому как пойдёт. Вот константная ссылка... Пример из той же оперы, - набор слов который не значит того, что слышится. Слава богу, что контекстная сила языка не только в этом. Этот блог - для тех кто только начинает. Опытных прошу не пинать.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru