Borr,
Здесь следует уточнить, как выделялась память...
На примере char, опять же, что не принципиально важно:
Если простым объявлением char с. - то, как только переменная попытается увеличить значение при 127 - ее значение станет -128, т.е. - обычное переполнение.
В NULL она никогда не уйдет.. это не указатель.
0+(-0) - это просто ЗНАЧЕНИЕ переменной.
char* c;
c = malloc(1300);
c[1299] = 'a'; - правильно.
с[1300] = ошибка....
вот здесь именно и будет выход за рамки диапазона, точнее - за рамки выделенной памяти.
А вообще, советую почитать хотя бы Страуструпа... Это - основа основ. В С нужно уметь работать с памятью и четко представлять себе разницу между указателем/обычной переменной.
Visual Basic 6<, кажется при значении переменной, выходящим за рамки ее максимального значения (127>) выдал бы переполнение.... Но это уже совсем другая история.
А если не совсем понятен смысл топика - так еще раз повторюсь:
Тема именно в математическом c+(-c) !=0 - срабатывает....
tAZAR,
еще одно приемущество делфи - относительно строгая типизация данных, что упрощает отлов утечек памяти и т.п. :cheesy:В С нужно уметь работать с памятью и четко представлять себе разницу между указателем/обычной переменной.
Люблю повеселиться, особенно пожрать,
Люблю и поработать, особенно поспать )
Люблю и поработать, особенно поспать )
Цто пудовEraser писал(а):"Писать плохой код на C++ гораздо проще чем хороший" (c) не дословно, не_помню_кто.
Но это не значит, что у всех кривые, простите, руки. После некоторого времени, перестаешь брать проблему лбом и разбираешься. Ничего сложного, в принципе, нет. Для новичка в программировании вообще - понятно, что Delphi изучить гораздо проще, чем с++.
1) И вообще, если честно, я стесняюсь назвать указатель в делфи указателем... POINTER - это, кажется, явно гораздо медленнее, чем указатель в с++.
2) С/С++ - языки более низкого уровня. понятно, что разобраться будет сложнее. здесь уже нужно более детально знать устройство работы ОС и устройства, для которого пишешь.
И вообще, Eraser - при чем тут "более строгая типизация" Delphi, если int a; - переменная
int* a; - указатель / если я не ошибаюсь (на паскале писал лет 5 назад):
var a:integer;
var b:Pointer (или что - то в этом духе) - и где тут путаница?. Кстати - остальные объекты "указатель" (явно типизированные), как я понял, в делфи обернуты в объекты...
Делфи - отличный язык как для начинающего программиста, так и для профессионала, это понятно. Но вот возможностей по работе с памятью в С явно больше. С этим не поспоришь.
А плохой код на самом деле, можно на любом языке писать. Главное - уметь это делать. OFFTOPIC:
Кстати, Eraser, если не заходил читать про точкунет - я там выложил пост по поводу managed+native code в С++. Там интересно
tAZAR,
но в большей степени на Delphi новичку проще из-за IDE, ну очень уж убогий этот самый IDE у продуктов MS... + MFC, исправились только в MSVS2005 во многом он мне нравится больше чем BDS2006.
А программирование на BC++ Builder (от Borland) думаю и для новичка будет не намного сложнее, чем на Делфи, хотя язык C++.
В общем кто на чем привык, тот тем и пользуется )) с выходом .NET выбор языка становится все менее принципиальным.
указатель он и в африке указатель )) с чего бы ему быть медленнее.. это всего лишь 4 байтная переменная, которая указывает на опр. участок кода.1) И вообще, если честно, я стесняюсь назвать указатель в делфи указателем... POINTER - это, кажется, явно гораздо медленнее, чем указатель в с++.
согласен, многие называют C++ высокоурвневым ассемблером.2) С/С++ - языки более низкого уровня. понятно, что разобраться будет сложнее. здесь уже нужно более детально знать устройство работы ОС и устройства, для которого пишешь.
int* a; - указатель / если я не ошибаюсь (на паскале писал лет 5 назад):
var a:integer;
var b:Pointer (или что - то в этом духе) - и где тут путаница?.
Код: Выделить всё
var
a: Integer; // переменная.
b: ^Integer; // указатель на переменную Integer.
чего только не услышишь )) нет, эт в C# что-то подобное, там даже простые типы данных являются своеобразными классами, в делфи это не так.Кстати - остальные объекты "указатель" (явно типизированные), как я понял, в делфи обернуты в объекты...
я б не сказал, что возможностей больше, C просто больше позволяет, отсюда и гибкость. Хотя в общих случаях разницы не вижу.. сейчас пробовал придумать некий пример работы с памятью, чтобы его нельзя было реализовать в делфи.. так и не придумал.Но вот возможностей по работе с памятью в С явно больше.
согласен, в какой-то степени это связано с тем, что в C криво организована работа со строками.. вернее не то чтобы криво, скорее низкоуронего, что отвлекает новичков от основного процесса кодинга.Для новичка в программировании вообще - понятно, что Delphi изучить гораздо проще, чем с++.
но в большей степени на Delphi новичку проще из-за IDE, ну очень уж убогий этот самый IDE у продуктов MS... + MFC, исправились только в MSVS2005 во многом он мне нравится больше чем BDS2006.
А программирование на BC++ Builder (от Borland) думаю и для новичка будет не намного сложнее, чем на Делфи, хотя язык C++.
В общем кто на чем привык, тот тем и пользуется )) с выходом .NET выбор языка становится все менее принципиальным.
угу, глянул, действительно интересно, жаль проверить не удалось, т.к. MSVS не установлена сейчас. Но все же я пока что за C#. Хотя кто знает, что будет когда займусь реальным проектом под эту платформу.Кстати, Eraser, если не заходил читать про точкунет - я там выложил пост по поводу managed+native code в С++. Там интересно
Люблю повеселиться, особенно пожрать,
Люблю и поработать, особенно поспать )
Люблю и поработать, особенно поспать )
Ну уж, блин, дановичку проще из-за IDE, ну очень уж убогий этот самый IDE у продуктов MS... + MFC...
В Delphi 7 - MDI интерфейс даже путем не сделали... Так - псевдо MDI, standalone окна, рабочий стол вынь - за заднем плане. Мне лично такое не очень нравится...
IDE у M$ уже начиная с VS5 была достаточно удобной, и мне приходится очень по вкусу (сейчас, конечно, работаю в VS2005, но и в 2003 пришлось долго сидеть)....
Ой как не уверен Хотя - все может быть...указатель он и в африке указатель ))
Явно int * a;...... int i = *a;
гораздо быстрее, чем var a:^Integer; i:integer;..... i:=Addr(a);
В с работа со строками не организована криво - там они представлены как указатели на char...(уровень ЯП!)
В С++ есть тип string; для работы с ним есть спец. строковые функции. ничем не хуже Delphi или VB.
Также - класс CString, который все умеет
А насчет С# - у меня в С++ по CLR (Windows Forms, .NET FW2.0, как и в C#) получилось то же, что и на C#, в таком же объеме кода со всей гибкостью С++:-). Так что - выбор языка теперь явно не принципиален. Ну, кроме сервисов и резидентов
tAZAR,
:cheesy:
кстати начиная с Д8 - переделали существенно.
не знал, учту.Также - класс CString, который все умеет
а.. если имелась ввиду не скорость работы, скорость написания ,тоОй как не уверен Хотя - все может быть...
var a:^Integer; i:integer;..... i:=Addr(a);
Код: Выделить всё
a := @i;
в делфи вообще нету MDI интерфейса, там другая концепция... когда привыкаешь - очень удобно.В Delphi 7 - MDI интерфейс даже путем не сделали
кстати начиная с Д8 - переделали существенно.
Люблю повеселиться, особенно пожрать,
Люблю и поработать, особенно поспать )
Люблю и поработать, особенно поспать )
tAZAR,
int * a;...... int i = *a; быстрее var a:^Integer; i:integer;..... i:=a^; ?
по-моему выполняются одни и те же ассмблерные инструкции.
тогда нету той разновидности, когда в рамках одного главного окна располагаются дочерние окна с открытыми документамиА есть
и чем жеименно она и имелась
int * a;...... int i = *a; быстрее var a:^Integer; i:integer;..... i:=a^; ?
по-моему выполняются одни и те же ассмблерные инструкции.
Код: Выделить всё
Unit2.pas.30: a^ := 0;
00457DF4 33D2 xor edx,edx
00457DF6 8910 mov [eax],edx
Unit2.pas.31: i := a^;
[u]00457DF8 8BDA mov ebx,edx[/u]
Люблю повеселиться, особенно пожрать,
Люблю и поработать, особенно поспать )
Люблю и поработать, особенно поспать )
Во какКод: Выделить всё
00457DF4 33D2 xor edx,edx 00457DF6 8910 mov [eax],edx Unit2.pas.31: i := a^; [u]00457DF8 8BDA mov ebx,edx[/u]
Я об этом и говорил. А вдруг там все бы замудренно было сделано Все - таки указатели, Delphi. Ну, защита - типа и все такое. Убедил!!!
ТОлько чем же тогда писать подобные вещи безопаснее по сравнению с С++? У меня чисто проф. интерес возник Все таки в работе с Delphi опыт очень мал, и я никогда не вдавался, как там все устроено, и как работает компилятор...
tAZAR,
многие кстати думают, что Делфи это какое-то подобие VB, где действительно все намудрено, на самом деле это полноценный x86 компилятор, который создает полноценный код, который, в свою очередь, работает без всяких виртуальных машин и эмуляторов, как и код, создаваемый в MSVS. До верссии 3 включительно, на Длефи можно было даже драйвер ядра написать, при умелых настройках компилятора... хотя конечно драйвер на делфи это бред ))Я об этом и говорил. А вдруг там все бы замудренно было сделано
в конкретном данном случае - ничем. Но C++ (а особенно C) предоставляет слишком широкие возможности неявного приведения типов, большинство ошибок новичков из-за этого.ТОлько чем же тогда писать подобные вещи безопаснее по сравнению с С++?
216523947есть предложение обменяться Асями
Люблю повеселиться, особенно пожрать,
Люблю и поработать, особенно поспать )
Люблю и поработать, особенно поспать )