ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

10.01.2010, 01:20
|
|
Участник форума
Регистрация: 07.01.2009
Сообщений: 237
Провел на форуме: 745649
Репутация:
97
|
|
Сообщение от [Life]
очередное горе, желающее, чтобы программа выполнялась за 0.00001с а не за 0.00005с. Мне лень вразумлять о преждевременной оптимизации, о том, что пишется код не для компьютера, а для программиста, и о прочих деталях пром кодинга, а не коленочного под пиво. Читайте книжки, или кодьте на асме. С++ сделали не для переписывания на нем си программ. Когда поймете, почему делают новые языки, такие как C++, Java, C#, тогда велкам.
А мне лень вразумлять о том, что человек, ИЗУЧАЮЩИЙ С++, должен знать о более оптимальных алгоритмах и приёмах. По-моему преимущество С++, заключающееся в возможности доступа к аппаратным средствам на уровне языка ассемблера, ещё никто не отменял. Иначе, может быть есть смысл фигачить кучи "высокоуровневых" программ на Delphi?
Человек ИЗУЧАЕТ С++. Вдумайтесь в смысл этих слов. Я вот сейчас очень доволен тем, что мои преподаватели по программированию не стали с ранних курсов загружать меня классами и объектами, а начали с самых основ.
К тому же, раз уж Вы заговорили о том, что С++ создан для облегчения жизни программисту, заявлю: метки только ухудшают понимание программы! Размывают чёткий алгоритм и структуру! А про оптимизацию, товарищ, я даже и не заикнулся.
[Life], таких как Вы послушать, так зарезервированных слов, как оказывается, не стоит знать и понимать. "Главное - классы! Рабочие классы, батенька!"
Последний раз редактировалось herfleisch; 10.01.2010 в 01:25..
|
|
|

10.01.2010, 01:25
|
|
Banned
Регистрация: 14.01.2009
Сообщений: 515
Провел на форуме: 1996429
Репутация:
468
|
|
1. Скажите что хранит переменная а
int& a=b; а ссылается на б,но что хранит а? Адрес? Вроде нет...
2. Show (int& a) {
... } что поступает на вход в функцию? Адрес а? Копия значения? Непойму никак...
3. Написано что нельзя сравнивать значения ссылой,а как же быть если это надо сделать?
4. Зачем придуманны ссылки когда есть указатели?
5. Если массив передается как аргумент в функцию ,то он передается по ссылке или передается адрес первого элемента?
|
|
|

10.01.2010, 01:30
|
|
Участник форума
Регистрация: 07.01.2009
Сообщений: 237
Провел на форуме: 745649
Репутация:
97
|
|
Сообщение от Krist_ALL
1. Скажите что хранит переменная а
int& a=b; а ссылается на б,но что хранит а? Адрес? Вроде нет...
2. Show (int& a) {
... } что поступает на вход в функцию? Адрес а? Копия значения? Непойму никак...
3. Написано что нельзя сравнивать значения ссылой,а как же быть если это надо сделать?
4. Зачем придуманны ссылки когда есть указатели?
5. Если массив передается как аргумент в функцию ,то он передается по ссылке или передается адрес первого элемента?
Указатель - это адрес памяти, если переходить на делетанский язык. А ссылки - это, так сказать, псевдонимы. Используются, в основном, для передачи в функции вместо указателей.
Т.е., а будет хранить 1, как и б. Отсюда и отталкиваетесь.
Книга Б.Страуструпа по С++ в помощь. Супер-вещь!
|
|
|

10.01.2010, 01:38
|
|
Banned
Регистрация: 14.01.2009
Сообщений: 515
Провел на форуме: 1996429
Репутация:
468
|
|
Часто ли юзаются/нужны соединения?
Оч похожи соединения на структуры..
|
|
|

10.01.2010, 01:38
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
жжоте товарищи. первое - цитата моя. несколькими страницами раньше написана, и для другого контекста. второе - тут классы просто некуда приписать, так что все herfleisch подсказывал правильно. третье - ставьте копирайты етиж их налево
Krist_ALL
1 - ссылку на b. по сути типа указатель на блок памяти переменной b. только читать a можно без разыменовывания. вот и вся разница. т.е. пишем a = 1 => b тоже = 1. пишем b = 5 => a тоже равно 5
2 - аналогично с первым случаем. адрес переменной, с которым можно работать без * и ->.
3 -
Код:
int main(){
int a = 5;
int b = 7;
int &c = a;
int &d = b;
cout << ((c == a) ? "true\n" : "false\n");
}
4 - для удобства. постепенно поймешь, когда придется писать много кода с классами. со ссылкой тебе не нужно держать в памяти какая переменная указатель, а какая ссылка. везде ставишь точку и все. ну и как параметр, в который возвращает функция знчение используется. когда функция должна вернуть больше одной величины.
5 - массив передается по умолчанию как указатель. можно передать массив по ссылке.
не соединения а объединения. юзаются весьма редко.
|
|
|

10.01.2010, 01:47
|
|
Участник форума
Регистрация: 06.02.2006
Сообщений: 177
Провел на форуме: 1576821
Репутация:
88
|
|
del
|
|
|

10.01.2010, 02:05
|
|
Banned
Регистрация: 14.01.2009
Сообщений: 515
Провел на форуме: 1996429
Репутация:
468
|
|
4. Какую точку ставить?О.О
а чем отличается
s(char a[]) {
... }
и
s(char* a[]) {
...}
?
Второй код писать когда из функции я буду изменять массив?
Тогда надо передать массив так s(&a) да?
Или..
Вообще написано что если в функцию передан массив ,то когда в функции делается ++ ,то с++ просто сдвигает на нужную ячейку и все. => в функцию передается адрес начала массива.
Когда массив из цифр,то чтоб передать массив в функцию,надо еще и передать ск элементов в нем,а когда массив чар из букв,то не нада размер т.К. Функция определит конец по нул байту..
Блин ппц с этими указателями.. После пхп с++ оч сложно учить.
|
|
|

10.01.2010, 02:28
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
не на том внимание заостряешь. массивы по ссылке передавать смысл есть только если тебе нужно в переменную вернуть массив. вообще используют std::vector, чтобы нагляднее все было.
s(char a[]) {
... }
и
s(char* a[]) {
...}
ты итак итак можешь изменить массив, потому что передаешь указатель на него. но вторая запись не эквивалентна первой. во втором случае ты передаешь двумерный массив. в этом реальный напряг с++. ибо в принципе это и двумерный массив, и передача указателя на адрес, хранящий одномерный массив. т.е. этот код может значить то, о чем думал программист, а не то, о чем нам говорит язык. собсно поэтому тут лучше использовать ссылку. чтобы видеть одномерный массив, переданный по ссылке, а не думерный массив.
по поводу инкремента и прочего - вот кто тебе мешает сделать проект и проверить все глазами и руками. делаешь массив. передаешь его в функцию. там инкрементишь. выходишь из функции и смотришь, изменилось ли значение исходной переменной, которую передал.
Код:
void s(char* a){
a++;
*a = '_';
}
void s2(char* &a){
a++; // очень плохо ибо delete не сработает -> утечка памяти
*a = '_';
}
void s3(char* &a){
delete [] a; // иначе утечка памяти
a = new char [strlen("foobar") + 1];
strcpy(a, "foobar");
}
int main(){
char* a = new char [5];
strcpy(a, "test");
s3(a);
cout << a;
}
PS: для уменьшения бардака есть такое слово как typedef. Определив char* как pchar ты упростишь читаемость кода. s(pchar &a) - ссылка на массив символов
Последний раз редактировалось Ra$cal; 10.01.2010 в 02:35..
|
|
|

10.01.2010, 02:37
|
|
Banned
Регистрация: 14.01.2009
Сообщений: 515
Провел на форуме: 1996429
Репутация:
468
|
|
Ты еще больше меня запутал( напиши в аську мне плз.
|
|
|

10.01.2010, 02:49
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
не, по асе не консультирую. ибо вместо того, чтобы попробовать учиться, писать код, компилить, наблюдать за работой, понимать, предпочитают сразу спрашивать. в этом плане форум самое то. я те пример кода привел. бери его и дебаж до просветления. будут доп вопросы по поводу конкретного кода - пиши на форум.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|