А разве * и & не отдельные операторы (что-то типа разыменования)? Что *a, что a[] - результат одинаков. С a[] в ногу чуть сложнее выстрелить. На сайзоф (а) я бы сказал В плюсах то со стрингами? Для стрингов перл помоему & греп, сед, аск всю жизнь были. А в сях строки это тот еще гимор. Начиная с того что там есть несколько типов строк (нуль терминайтет, с длинной строки в нулевом байте как в паскакале и так далее)... Зато какой ... gerodoth, если тяжко с чарами - попробуй с интами. Бери обычный массив ну пусть будет #define N 10 unsigned int a[]=new int[N]; for(int i=0;i<N;i++)a=N; и вперед. А потом уже и указатель на массив указателей можно будет оформлять. Это не спортивно. Пусть в уме решает (я ideone.com юзаю) Указатель не должен быть никакого типа в этом и фишечка. Указатель [как переменная] это адрес ячейки памяти. void *a и вперед. хочешь cout<<(int*)a, хочешь cout<<(char*)a - тут самое главное ногу не прострелить Я по большей степени безплюсонасильник, там со сканфами и принтфами по началу чуть сложнее, а затем легче. А бывают не восьмибитные байты? Кстати даже short int это помоему 16 бит в х86 архитектуре, а целое 0-255 я даже и не припомню с ходу такой тип. в паскакале помоему какой-то интеджер был (byte 0…255 1 как гугол подсказывает) Может. Нет, все верно. Мы сам указатель (адрес ячейки памяти) увеличиваем на два, так как указатель на строку и указатель на символ - это указатель на ячейку памяти (в первом случае не понятно какой длинный будет строка но это специально, что бы легче было ногу прострелить; во втором случае строка длинной 1 символ) - получается *(k+2)=k[2]. Ну и я бы для надежности string * k = "hello\x0" бы сделал. "Не все так однозначно" Указатель на строку всё-таки не равен указателю на массив указателей. string **str_ptr=new *string[3]; str_ptr[0]=*string="hello\x0"; str_ptr[1]=*string="the\x0"; str_ptr[2]=*string="world\x0"; как-то так пс: куда мы катимся.... консультации по обучению сям на форуме... там где онлайн лекции преподавателю вопросы нельзя задавать?
жалко его, я его по текущим темам так гружу что он злиться начинает а иногда перестает отвечать. человек по 50 на вебинарах, а все молчат, один я гружу. ну и он странный, 6ю пару подряд рассказывает про память, указатели, указатели на указатели, без примеров применения опять же это непонятно сходу зачем. мол 2 системы именования переменных - по имени переменной и по указателю. плюс указателя тем что ему можно тип менять - ну дак описали б в языке что переменной можно тип менять и не грузились бы так. сами создали проблему, сами решили - ай красавцы.
Как я его понимаю. Тут в соседней теме один столько вопросов задает что вчетвером отвечать не успеваем. Такая методология преподавания. Этим си и силен. Плюс это тру теория, её иногда надо просто выучить и запомнить, не особо вникая, если вникалка слабая. Это называется преобразование типов - оно есть во многих языках. Но все языки разные - гибкая работа с памятью - сила си. На си даже на контроллеры можно писать прошивки и код чуть менее эффективнее ассемблера. Да не было никакой проблемы.
а вот про контроллеры может пригодиться, полезно. я тут недавно стал в питон лезть, товарищ что мне питон когда рекламировал говорил что тот си-подобный. а поуглублявшись и решив что пора практиковаться выяснил что питон под винду компилировать не особо то и принято, он в консоли силен, а для тех целей мне повершела с цмд хватало. и у меня винда везде, на работе из-за 1с, дома из-за проприетарных железок. хотя поначалу питон попроще си, но тут начали курс читать, дай, думаю, в си полезу. пока лезу не особо понимаю зачем, с окошками что-то могу на лазарусе накидать, с консолью тоже дружу, а вот контроллеры могут пригодиться.
Дык... вроде нет. Вроде это особый тип данных - указатели Прикольно например использовать конструкцию что-то типа short int *a = {\x33, \x31, \x32, \x33, \x34, \x35 \ x00} ; cout << (char *) a ; // за синтаксис не ручаюсь - давно такой бадягой не пользовался Таки стреляет. Падла. Пробовал. Получается Ну не стал я городить огород. Зачем новичку сайзофы ? нью,, алоки/малоки, конструкторы/деструкторы. Хотя ничего в них сложного ни разу. Но когда в голове громоздится каша - это не есть гуманно. Так и хочется сишных авторов библиотек аннигилировать. Единственная реализация С++ это Qt где со строками (стрингами) работать не настолько мозговыносяще, как в других реализациях. Но Кют в среде просвещенной программистской интеллигенцией идет за западло. Среда для поделок Ему конкретную задачку надо решить. Вот он с чарами и заморочился. Тык он не в спортшколе, а в началке. Ему втукнуть надо в синтаксис языка и привыкнуть к нему. Онлайн тренажоры самое то. Ну чтоб не заморачиваться себе собственный десктоп не ставить бормана или еще какого визуал шарпа. Ты заметил Специально такую конструкцию написал. Чтоб доходчивее было. Да они (разработчики языков) - задолбали уже. В зависимости от архитектуры процессора одни и те же переменные имеют разные сайзоффы. Напишешь для одного - все путем. На другой платформе - не работает. И начинаются (цуко!!!) танцы с бубнами. Одно дело когда ты пишешь и косяки сразу же видны по ходу написания. Другое - когда прога уже написана - вот тогда отыскать косяк - сущий гемор. Особенно, если он неочевидный. Эт если оператор "=" перегружен. Но не факт. Хотя.... в последнее время, наверняка уже все библиотеки этот оператор перегрузили. Убедил. Теоретически НЕ может, в реальности - таки да. Хм..... чето-то тут не так
походу никак не смогу, с сетями я не сталкиваюсь, только пользуюсь тем что есть, у меня в основном с локальными данными работа. сайзофы были в начале в обоих курсах в 1с отладкой удобно, я прям привык уже к ней почти.
про наследование классов допустим создаем класс с двумя родителями. создаем объект класса. память выделается под объекты всех трех классов? не накладно?
#include <iostream> using namespace std; class A{ public: int x; A(int x){this->x=x/2;} A(A &p){p.x = 4; x=1;} }; int main() { A p1(4); cout<<p1.x; } еще задачка, переписал, откомпилировал, но смысла не понял. что эта строка делает? A(A &p){p.x = 4; x=1;}
Ну насколько я помню со своими остаточными знаниями, то у класса здесь два конструктора. Первый запускается, когда конструктору передаётся число типа int, второй запускается если конструктору передаётся объект типа A. A p1(10); // запускается конструктор 1 A p2(p1); // запускается конструктор 2 Соответственно эта строка свойству х объекта p1 присваивает 4, а свойству x объекта p2 присваивает 1. В примере, как он указан выше, данный конструктор № 2 действительно ничего не делает, но для чего он в принципе может понадобиться я объяснил выше. По-моему так, хотя может я и ошибаюсь, давно всё это изучал.
вроде да, попалась потом похожая косяк задач в том что они на время, секунд 10-15 дается, текст не скопировать и неправильные ответы не разбираются, существенный минус как по мне. я их скриню и переписываю потом. а иногда вроде ответ знаешь, а не правильный, а текст задачи не вспомнишь. неудобно таки.
может и так лектора я попытался понапрягать вчера, лекции по средам, он прям нервничает, похоже трогать его не стоит, придется вас. #include <iostream> using namespace std; template <class T> void f(T){ static int i=0; cout <<++i; } int main(){ f(1); f(1.0); f(1); } почему возвращается 112? почему 2 в конце? ---------- Сообщение добавлено 20.10.2016 17:40 ---------- а до меня начинает доходить первый раз передается инт, и повторный вызов ссылки на него работает с той же переменной
Шаблонная функция f() по по факту будет скомпилирована в две функции: void f(int); void f(float); В main() два раза вызывается f(int), поэтому второй раз 2 в консоли...
а гипотетически если объявить константой число, а потом через указатель численного типа попробовать его поменять - получится?
Не обязательно гипотетически, можно на живую - следующий код, если я правильно понял условие выше, будет выбрасывать обшибку, вполне ожидаемую:
Плохая идея, язык C/C++ сильно типизирован, т.о. компилятор ругнётся на несоответствие типов указателя и переменной .
еще мутный пример #include <iostream> using namespace std; int &func() { static int x=3; return x; } int main(){ func()=8; cout<<func(); } функции без параметров присваивается число, как это? ---------- Сообщение добавлено 22.10.2016 18:45 ---------- на память оставлю, ниче не понял #include <iostream> using namespace std; class X{ private: int x,y; public: X():x(0),y(0){} void show(){cout<<x<<y;} X& operator()(int dx, int dy){ x=dx-1; y=dy+1; return *this; } }; int main(){ X pt; pt(3,2); pt.show(); }
#include <iostream> using namespace std; class A{ public: void f(){cout<<1;} }; class B: public A{ private: void f(){cout<<2;} }; void c(A &a){a.f();} int main(){ B b; c(b); } вкурил как работает, но блин за 15 секунд я такое не успеваю сообразить
Вроде как умеет код генерить, те если одно и тоже интерпертировать - может раз "заготовку сделать" а потом уже ей быстренько результаты выдавать. Как то так "на пальцах" объясняли. https://pythonworld.ru/osnovy/program-compilation-with-cx-freeze.html
можете что конкретное в виде задания сформулировать, кроме сетей? Тоже почитываю книжку, но пока кроме примеров из книги ничего толком не делала.