Форум: "Прочее";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];
ВнизИщу помощи, как новичок. Найти похожие ветки
← →
palva © (2007-08-02 16:05) [80]Наверно, плохо объяснил. Лучше изучать это дело на примерах.
← →
Галинка © (2007-08-02 16:12) [81]palva © (02.08.07 16:05) [80]
объяснил нормально. на каких примерах и как изучать? в отладчике код на асме смотреть?
← →
Kerk © (2007-08-02 16:14) [82]> [81] Галинка © (02.08.07 16:12)
Лучше какую-нить книжку по С почитать стоит, я думаю. На асме - это для извращенцев :)
← →
Algol (2007-08-02 16:19) [83]
> palva © (02.08.07 16:01) [79]
А чем это описание отличается от описанного выше?
Или вы хотите сказать что в с++ ссылке можно присваивать РАЗНЫЕ переменные? (спрашиваю, без сарказма, действительно не знаю, потому как я не сишник) Если же это константа, то какой смысл ее передавать функции?
← →
Галинка © (2007-08-02 16:25) [84]Да читаю я. Но про ссылок там нет. Наверное надо еще Страуструпа почитать.
А вот по теме вспомнила еще. Сэджвика "Фундаментальные алгоритмы на Си" (за прваильность названия не ручаюсь). Хорошая книга?
← →
Kerk © (2007-08-02 16:27) [85]> [83] Algol (02.08.07 16:19)
Если ссылке можно присваивать РАЗНЫЕ переменные и при этом их можно передавать в функции, то исчезают отличия ссылок от указателей, ибо слабо представляю реализацию этого на асме (извините уж, что с этим пристал).
← →
Algol (2007-08-02 16:35) [86]
> Kerk © (02.08.07 16:27) [85]
Я тоже так думаю... Но по словам plava "Ссылка экономит нам звездочки"...
Если это действительно так, то я могу согласится, что ссылка в C++(!) - довольно бесполезная штука, этакий синтаксичейский сахар, сомнительный к тому же...
То же что описывал я, именно относится к передаче параметра по ссылке (то есть ref или var).
← →
palva © (2007-08-02 16:42) [87]> Если же это константа, то какой смысл ее передавать функции?
Никакого особого смысла не имеет, вернее смысл ровно такой, как и передача по значению обычной целой переменной. Переменная r, описана как ссылка, но выражение r имеет тип int. Но это не константа. Если меняется n, то изменится и r. И наоборот. Это типа синонима переменной n. Можно передать в функцию адрес ссылки, тогда ссылку можно изменить внутри функции (не адрес, конечно, а само значение)
#include <stdio.h>
int n;
int &r = n;
void fun(int *i) {*i=888;}
void main() {
n = 777;
printf("%d\n", n); // 777
fun(&r);
printf("%d\n", n); // 888
}
← →
Галинка © (2007-08-02 16:48) [88]
> Если же это константа, то какой смысл ее передавать функции?
только тем, что работать будешь напрямую с переменной, а не с ее локальной копией, переданную в эту процедуру.
← →
palva © (2007-08-02 16:50) [89]Но все эти конструкции практически не применяются на практике. Ссылки придуманы единственно ради того, чтобы передавать параметры по ссылке. В чистом си для этого приходится передавать указатель, как выше. А в си++ можно написать так:
#include <stdio.h>
int n;
void fun(int &i) {i=888;} // procedure fun(Var i: Integer)
void main() {
n = 777;
printf("%d\n", n); // 777
fun(n);
printf("%d\n", n); // 888
}
Также можно возвращать значение по ссылке. То есть в функции выделяется память под целое и возвращается ее адрес. Внешняя программа присваивает возвращаемое значение не указателю на целое, а обычной целой переменной. И эта переменная становится как бы ссылкой, но об этом лучше сразу забыть. Это обычная переменная.
← →
Algol (2007-08-02 16:55) [90]
> palva © (02.08.07 16:42) [87]
Правильно я понял, что сишная ссылка места в памяти не занимает, то есть не является переменной?
← →
alex_*** © (2007-08-02 17:06) [91]
> Правильно я понял, что сишная ссылка места в памяти не занимает,
> то есть не является переменной?
>
теперь я не понял. Где же ей обретаться?
← →
Kerk © (2007-08-02 17:07) [92]Как я понял, ссылка - это тупо псевдоним. Что-то наподобие можно с #define делать.
← →
palva © (2007-08-02 17:08) [93]В программе это переменная. Но если спросить ее адрес, то будет тот же адрес, что и у величины, на которую она ссылается. То есть, действительно, места в памяти не занимает.
← →
palva © (2007-08-02 17:17) [94]Что-то я про возврат значения по ссылке вам какую-то чушь написал.
На самом деле, если функция возвращает ссылку, то вызов этой функции можно располагать в левой части оператора присваивания. Вот пример.
#include <stdio.h>
int& fun(int *p) {
return *p;
}
void main() {
int n = 5;
printf("%d\n", n); // 5
fun(&n) = 7;
printf("%d\n", n); // 7
}
← →
palva © (2007-08-02 17:21) [95]
> теперь я не понял. Где же ей обретаться?
Компилятор помнит, что она синоним. А что тут странного, такая же конструкция есть в PHP.
← →
boriskb © (2007-08-02 17:28) [96]
> А что тут странного,
Это еще в PL/I было.
Можно было объявить х:Int и указать что эта же память отводится под y:bin и она же s:str
На первый взляг кажется - "зачем? несовместимость типов рано или поздно гарантирована", на на самом деле бывало очень удобно.
А уж чтоб область памяти могла интепритироваться разными типами - забота программиста
← →
Kerk © (2007-08-02 17:28) [97]В паскале было absolute
← →
palva © (2007-08-02 17:46) [98]> В паскале было absolute
В нынешнем делфи тоже есть. Только в delphi absolute используется для того, чтобы одна и та же область памяти могла интерпретироваться как переменные разных типов. В си для этого тоже можно использовать ссылки:
#include <stdio.h>
char d[4];
int &n=*(int*)d;
void main() {
n = 0;
d[0] = 1;
d[1] = 1;
printf("%d\n", n); // 257
}
Здесь d массив байтов (знаковых), а n целая переменная занимающая то же самое место в памяти.
← →
palva © (2007-08-02 17:55) [99]Бедный AntifreezeeR (((
← →
Kerk © (2007-08-02 17:57) [100]Значит приходим к выводу, что ссылки в С - это аналог паскалевского absolute. Разница только в том, что в паскале нельзя их переприсваивать.
← →
Kerk © (2007-08-02 18:01) [101]> [99] palva © (02.08.07 17:55)
Это кто?
← →
palva © (2007-08-02 18:09) [102]
> Это кто?
Это автор сабжа.
← →
Algol (2007-08-02 18:09) [103]
> Это кто?
Это топикстартер.... Он хотел узнать с чего начинать изучение делфи :)
← →
Kerk © (2007-08-02 18:10) [104]А... да ну его :))
← →
Anatoly Podgoretsky © (2007-08-02 22:46) [105]> Игорь Шевченко (02.08.2007 10:48:37) [37]
Еще интереснее, что об этом говорит математика.
← →
Anatoly Podgoretsky © (2007-08-02 22:48) [106]> Kerk (02.08.2007 12:08:39) [39]
Указатель это переменная хранящая ссылку, а ссылка это само значение адреса, так понятно?
← →
Anatoly Podgoretsky © (2007-08-02 22:51) [107]> Kerk (02.08.2007 13:32:58) [58]
Вот когда вылетишь по AV при компиляции тогда и поймешь, происходит или нет.
← →
Anatoly Podgoretsky © (2007-08-02 22:52) [108]> Галинка (02.08.2007 13:33:01) [61]
@имя
$FFFF0
← →
Anatoly Podgoretsky © (2007-08-02 22:54) [109]> Галинка (02.08.2007 13:47:07) [67]
Об этом надо было думать раньше, а не называть тему как "Ищу помощи, как новичок."
← →
Галинка © (2007-08-03 11:58) [110]Anatoly Podgoretsky © (02.08.07 22:54) [109]
тема не моя. Просто как-то к слову пришлось. Вот и начали обсуждать указатели и ссылки ))
← →
Anatoly Podgoretsky © (2007-08-03 16:06) [111]> Галинка (03.08.2007 11:58:50) [110]
Да ладно, все равно нет одназначности, особенно при межязыковом сравнение.
Страницы: 1 2 3 вся ветка
Форум: "Прочее";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];
Память: 0.65 MB
Время: 0.056 c