1 / 1 / 0
Регистрация: 01.03.2011
Сообщений: 11
|
|
1 | |
Ссылки и указатели01.03.2011, 12:10. Показов 17075. Ответов 54
Метки нет (Все метки)
Добрый день.
Возможно было. В чем существенная разница между передачей данных в функцию по ссылке или указателю. В каких случаях вы бы что рекоммендовали. Заранее спасибо.
0
|
01.03.2011, 12:10 | |
Ответы с готовыми решениями:
54
Указатели и Ссылки Ссылки и указатели Ссылки и указатели Указатели и ссылки? |
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
15.07.2011, 18:21 | 41 |
Не должно! Какой компилятор? Выкиньте его на свалку, он нарушает стандарт.
С преобразованием типа - будет компилиться, без преобразования - не должно.
0
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
15.07.2011, 18:41 | 43 |
Насколько помню, в Си не было ссылок...
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
||||||
15.07.2011, 18:44 | 44 | |||||
ДРузья, я был неправ. Но это бросает тень на меня и только.
Итак, мне нравится когда всё о чём я говорил компилится с преобразованием типов
0
|
15.07.2011, 18:46 | 45 |
А при чём тут ссылки? Речь идёт о преобразовании типа над указателями на функцию (первый пример из поста #22). Далее в посте #38 я нарисовал пример, отрезавшись от Си++ (чтобы его можно было компилять и на Си, и на Си++). В режиме Си на, к примеру, борландовском компиляторе он не пройдёт компиляцию, а на gcc - пройдёт. Ибо gcc по умолчанию работает в некотором своём расширении, который допускает больше безобразия, нежели стандартный Си
1
|
grizlik78
|
15.07.2011, 18:47
#46
|
Не по теме: — Доктор, когда я делаю вот так, мне больно!
2
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
15.07.2011, 18:48 | 47 |
Не... Просто аккуратно надо.
Я когда-то исследовал функции с переменным числом параметров и тоже вовсю использовал преобразование указателей. Было интересно передать в функцию с переменным числом параметров указатели на функции с разным числом параметров и там все их вызвать...
0
|
15.07.2011, 19:14 | 48 | ||||||||||
Сообщение было отмечено как решение
Решение
С точки зрения языка сие допустимо, но по сути дела это UB, потому как в точке вызова и в точке самой функции должны быть одинаковые прототипы. Возьмём пример из двух файлов:
Код
f1=3fa00000, f2=40300000 Ровно такая же бодяга происходит и при преобразовании типов над указателями на функции. Т.е. компилятор такую операцию разрешает, но всю ответственность перекладывает на программиста. Если программист даёт себе отчёт в том, что данная программа предназначена для конкретных программных соглашений по передаче параметров, то у него всё будет работать. Если программист считает, что если на одной архитектуре у него отработало, а значит будет работать везде - то сам дурак Ну и такие же риски имеются, если с var_arg'ами работать так, как в начальных примерах твоей статьи - непосредственно через указатели Добавлено через 1 минуту Да, забыл сказать. Это пример работает только в Си, потому как с точки зрения Си++ функции с одним именем, но разными типами параметров - это разные функции
8
|
Android Programmer
141 / 142 / 10
Регистрация: 08.12.2010
Сообщений: 421
|
||||||
15.07.2011, 23:13 | 49 | |||||
такс всеравно не до конца пока улавливаю суть.
с указателем то ещё ладно, но для статической переменной откуда память то берется? Закинул все это дело в вечный цикл, подождал минут в 20 в надежде что оно вылетит, но нет..
0
|
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
|
||||||
15.07.2011, 23:37 | 50 | |||||
так ваще делать нельзя.
по идее должно вылететь. побольше выделять попробуй:
0
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
15.07.2011, 23:40 | 51 |
Все переменные С++ распределяются на три вида по виду памяти:
static storage (глобальные и статические переменные), automatic storage (локальные перменные) и dynamic storage (динамические переменные). Для статических-глобальных объектов память рампределяет компилятор при трансляции. Они "живут" все время, пока работает программа. Локальные объекты "рождаются" в стеке, там же и "помирают" во время работы программы. А динамические объекты создаются явно во время работы программы в куче. И их надо явно "убивать". Поскольку куча - 2 гига (виртуальная память), то выделяя по одному int, вы нескоро ее исчерпаете.
0
|
Android Programmer
141 / 142 / 10
Регистрация: 08.12.2010
Сообщений: 421
|
|
15.07.2011, 23:54 | 52 |
я ж говорю я пока не понимаю откуда память для переменной b берется, ведь как я понимаю, она должна выделяться при создании объекта, а объект то не создается, или я что-то не так понимаю?
0
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
16.07.2011, 00:01 | 53 |
VS 2008 в отладочном режиме тут же выдала
0
|
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
|
|
16.07.2011, 00:02 | 54 |
Если имеются ввиду операторы new/delete, то у Herb Sutter применяется термин "Free Store", а не "Heap".
Exceptional C++ - Memory Management - Part I
0
|
16.07.2011, 00:08 | 55 |
Указатель p не инициализировался, а потому там мусорное значение. Звёзды встали так, что этот мусор оказался валидным адресом. И по этому адресу обращение не сломалось, при этом ты записывал в поле a, а потому просто гадил в чью-то память. Опять-таки звёзды встали так, что это оказалось нефатальным.
То, что у тебя цикл бесконечный - по сути ничего не означает. Каждый раз переменная p у тебя лежала в одном и том же месте стека, а потому каждый раз в ней был записан один и тот же мусор. А следовательно ты каждый раз гадил в одну и ту же память. Т.е. что цикл из одной итерации, что из бесконечного количества - в данном случае роли не играет Добавлено через 2 минуты Конкретное значение указателя роли не играет, ибо на вызове метода это никак не отражается (см. по ссылкам из поста #24). Реальная засада могла быть только при записи в поля a и b. Но, как уже писал выше, звёзды встали так, что мусорное значение оказалось валидным адресом, нагадив по которому ничего страшного не произошло
0
|
16.07.2011, 00:08 | |
16.07.2011, 00:08 | |
Помогаю со студенческими работами здесь
55
Ссылки, указатели Указатели и ссылки Ссылки и указатели Указатели и ссылки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |