Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.02;
Скачать: CL | DM;

Вниз

Ищу помощи, как новичок.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.67 MB
Время: 0.028 c
15-1186050402
TStas
2007-08-02 14:26
2007.09.02
Есть у кого-нибудь TNMHTTP?


1-1182330747
Makhanev Alexander
2007-06-20 13:12
2007.09.02
прочитать результат консольного приложения...


4-1173115326
Dmitry_177
2007-03-05 20:22
2007.09.02
Курсор над кнопкой


1-1182078980
zzz(KOT)zzz
2007-06-17 15:16
2007.09.02
Проблемы с графикой в Delphi, Индексирование цвета


15-1185959643
Сатир
2007-08-01 13:14
2007.09.02
Не сохраняются настройки cxGrid, если не установлен Delphi