![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
maxi2 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 8.5.2012 Репутация: 1 Всего: 1 |
Ну-ну, я в ваш адрес могу эту букву и написать. Пусть вы и эксперт. То что вы не хотели связываться это ваше дело, только на кой ... было это дискусию может быть бесполезную продолжать, и именно тогда когда может менее более разобрали по полкам. Если замечание есть-жду критики. Правда освоить c++ трудно именно через сабж этой темы. Особенно если делать это самому. Кроме того как и каждый язык-это искуственно- и это надо воспринимать как оно есть. Другие языки как раз не имеют такого синтаксиса, и это упрощает работу и уменьшает ошибки. В том то и дело что в школе я разве програмирование не учил, ибо его не было, а если бы было то думаю в паскале указателей и ссылок нету.
|
|||
|
||||
maxi2 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 8.5.2012 Репутация: 1 Всего: 1 |
Вот если во второй функции в обьявление есть указатель, а при инициализации идет ссылка которую можно поплутать с взятием адреса, то я и написал что нужно приравнивать. Ибо раньше такое встречалось и было непонятно. Если аргумент функции меняет тип то как это понять. Например есть у меня 3ья функция: по вашему что бы быть програмистом надо быть еще каким то прорицателеm. x=2; void fun(int &y=x) {y++;}... main fun (); -тогда х и y синонимы и равны 2// func(z) -z и y-синонимы-то есть уже зед увеличивается. В этом примере не так просто догадатся что в первом случае параметры функции будут-&y=х; а во втором-&y=z; вот последнее выражение понятно как солнце в ясний день. |
|||
|
||||
ldir |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 13.11.2012 Репутация: нет Всего: 1 |
maxi2, не хотелось влазить, но тем не менее спрошу. Вы пытаетесь людей знающих с++ как то на свой лад переучить?
|
|||
|
||||
maxi2 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 8.5.2012 Репутация: 1 Всего: 1 |
Кстати меня так выправляли, но всетаки не выправили: то что в правой части это как раз взятие адреса, а в левой это ссылка: это поспешность в чтение материала. Так и в функции: в первой это адрес-а во второй-ссылка. я вас и спрашивал как компилятор отличает: вот по левой или правой части и отличает. Если бы были такие опытные это бы в два счета обьяснили.
|
|||
|
||||
ldir |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 13.11.2012 Репутация: нет Всего: 1 |
maxi2, на мой взгляд, это вы в два счета должны были в книжках прочитать и понять, а не на форуме спрашивать
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
maxi2, по правой части решение применяется только в стандарте С++11 при использовании типа auto. Но тебе еще о нем знать рано. Тип операции вычисляется для левой и правой частей независимо. И если типы несовместимы с операцией, то выдается ошибка.
Я тебе уже написал, что операция int *y = &x; выглядит как две: 1. объявление переменной y: int *y; 2. инициализация ее адресом переменной x: y = &x; Просто не понимая таких простых вещей ты никогда не сможешь понять более сложных, например: int *y = &x, &z = n, *&q = y; Еще раз вдумчиво перечитай то, что тебе писали тут ранее. Я тебе даже примеры приводил. Попробуй проанализировать каждую их строку. И не надо пытаться догадаться как работает компилятор. Тебе на данном этапе это только помешает. На будущее. Если в начале операции участвует тип вне скобок, то эта операция является объявлением переменной(ых).
Во-первых, данный код, написанный вне тела функции вызовет ошибку (из-за x=2 - вне функций нельзя выполнять присваивание, как и другие операции, кроме объявлений типов, переменных и функций). Во-вторых, обычно, в качестве дефолтных значений параметров функций используют некие константы. |
|||
|
||||
maxi2 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 8.5.2012 Репутация: 1 Всего: 1 |
Я никого не хочу переучить. Если б я десятки или даже сотни часов приделил c++ то многое было понималось само собой. Вот очень интересный пример о ссылках функциях: и меня коуд блок почему выводит одинаковый результат тип ли это инт& или просто инт. int x=5; int& fun1(int y) { x+=y; return x;} void (у меня работает лиш int?) main () {cout<<fun1(2)<<endl; cout<<x<<endl;}//7 7-какой смысл такой функции ссылки если без амперсанда получается это самое.
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
по стандарту, функция main() должна возвращать тип int. Все остальные варианты нестандарты и могут не поддерживаться.
|
|||
|
||||
maxi2 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 8.5.2012 Репутация: 1 Всего: 1 |
Смотрите если есть int q=3; то и q=3; я ишел по логике что если заменить q=*y-то ничего не поменяется. Я вам уже наверное пять раз писал что меня здесь раздражает: если int q равняется, указывает на адрес почему оно потом без типа инт уже равно значению что есть в этой ячейке. Ну пусть. Это можно взять за должное ибо законами физики или математики это не понять. Это так придумали. Если работает. Все хорошо. А насчет правой и левой части это так и есть ибо ссылка обьявляется &z=х, а не наоборот. Вы меня простите, но если бы записывали int *y=х, и это все воспринимали то ничего бы особо не изменилось и было бы логичнее.// что значит возвращает ссылку-это адрес или синоним. Она ведь возвращает значение х.
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
maxi2, ну как тебе еще объяснить, что int *y; - это такой синтаксис языка объявления указателей. int *y = &x; это тоже самое, что int *y; y = &x;
Запись &z = x вообще недопустима. Ты присваиваешь адресу какое-то значение. А вот int &z = x; - это совсем другое. Это создание ссылки z типа int на переменную x. |
|||
|
||||
EgoBrain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 23.3.2008 Где: Комната Репутация: нет Всего: 2 |
maxi2, зачем ты мне какую-то цитату приписываешь? Я такого не постил.
Может быть стоит отказаться от использования языка если он раздражает, и происходит оттаржение его норм и принципов? Ссылка так не объявляется. Ссылка объявляется так:
|
|||
|
||||
NoviceF |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: 2 Всего: 2 |
я вот больше склоняюсь к варианту
в том числе и потому, что такое написание позволяет визуально разделить объявление переменной и разименование. Конечно, всё понятно и по контексту, но так, на мой взгляд, логически более стройно.. хотя и образует другую проблему вида
Но вроде гуру учат объявлять каждую переменную на новой строке, так что в собственном коде такой несогласованности вполне можно избегать. |
||||||
|
|||||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
||||
|
||||
maxi2 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 8.5.2012 Репутация: 1 Всего: 1 |
Последнее это наверное склонность к итальянским фамилиям. Я вот приведу пример откуда начиналось мое понимание указателей, и оно несколько не похоже на ту строку которую мы уже обсуждаем несколько дней. int *mypointer; int first, second; mypoimter=&first; *mypointer=10; mypointer=&second; *mypointer=20;¥ c++ language tutorial (cplus.com)-stranica 66. Поясните все таки что значит возвращает ссылку. В одном из вышеприведеных вариантов и вообще. Например функция int& fun2(int &z) {z++; return z;} ...main () {int x=5; fun2(x); cout-x-10. Почему функция возращает 10. А не 6. Или надо воспринимать это как &fun2=х-а как левая часть десять то и х=10. Или наоборот. Ибо функция возвращает х. Какая то обратная зависимость? У меня прогерского мышление нету потому обьясните пожалуста-и для чего здесь пост-инкремент?
|
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |