![]() |
![]() |
Dark |
![]()
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: ![]() ![]() ![]() |
Люди, приведите мне пожайлуста 10 отличий си от паскаля(не касаясь синтаксиса)... А то передо мной стоит дилема: изучать си или нет, но я не вижу разницы между си и пасом!!!!!!!!!
-------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
![]() ![]() |
Deny |
![]()
Сообщение
#2
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 149 Репутация: ![]() ![]() ![]() |
Цитата Диалект Си сплошное изврашение, особо после Паскаля. Pascal+Asm=Rulez. А ты у нас типа знаток всех диалектов, всех языков.... вот и пиши все на Паскале, ты на нем наверное и разговариваешь... ??? Не хочешь учить - не надо, тебя ни кто не заставляет. >:( Ты бы не позорился своими заявлениями, до того как сам разберешся, да же написать правельно не смог, Си - это язык, а не диалект. Любой язык+Asm=Rulez. Добавлено позже: Цитата Q4: А как же тогда деление не нацело!! Q5: Раскажи про указатели их использование и на кой они нужны, Q6: динамическую память и использование ее для массива произвольной размерности(в пределах 64 kb). А то эту темц я не очень провариваю! A4: Тут все еще проще, если в операции учавствует число не типа int, то и результат будет не типа int. A5: Указатель - это особый тип переменной, он содержит адрес какой-то переменной обычного типа. Создается он например так: int *ukazatel; звездочка обозначает, что переменная ukazatel является типом "указатель", а int, что она будет указывать на переменную типа int. Допустим, у нас есть переменная peremennay типа int: int peremennay; со значением 123, peremennay = 123; зделаем так, что бы наш указатель указал на нее, для этого есть операция "&" ukazatel = &peremennay; если теперь мы посмотрим на значение нашего указателя, то оно будет похожим на подобие этого, 0x0012FE20 это число на самом деле не число (результат абстракции), а адрес в памяти, где лежит начало переменной на которую мы указываем. Теперь мы можем обратиться к нашему числу 123 двумя способами. Так peremennay -= 23; или так *ukazatel -= 23; все с то же зведочкой, в обоих случаях наша переменная будет содержать число 100. С помощью указателей можно создать безымянную/динамическую переменную, для этого есть операция new, int *uk; uk = new int; к стате можно писать сразу так int *uk = new int; теперь указатель uk указывает (содержит адрес памяти где начало) на переменную типа int не имеющию названия/имени. Для того, что бы освободить память (вернуть в кучу) от не нужной нам больше переменной, есть операция delete, например delete uk Так как переменные различних типов и тем более целые структуры занимают по нескольку (теоритически сколько угодно много) ячеек памяти, то представте сколько займет времени у процессора, что бы к примеру передать какую либо большую структуру/переменную в какую-то функцию, да еще и получить обратно новое значение. Если функция работает один раз, то это еще ничго, а если 10....100 тысяч раз? Как выход из положения и существуют указатели, они каротки, и в функции передаются значительно быстрей,т.к. содержат только адреса начал нужных структур/переменных, а не непосредственно грамоздкие структуры/переменные. Переменные обозначающие обычные массивы отличаются тем, что они всегда являются указателями на первый элемент данного массива. Динамические массивы создаются точно так же: int *arr = new int[100]; создали указатель на переменную типа int и присвоили ему значение адреса первого элемента из 100 элементов типа int. Для того, что бы освободить память используется таже операция delete, но теперь со скобками, что обозначает, что мы хотим удалить весь массив, а не, только первый элемент, delete [] arr; При создании динамических переменных или массивов, в случаи нехватки памяти, указатель будет содержать предопределенную константу NULL. Над указателями можно проводить арифметические операции, например: double *arr = new double[20]; значением arr будет адрес в памяти, например 0x0012FE31 указывающий на первый элемент массива, т.е. arr[0], после операции arr + 1 или, что то же самое arr++, arr будет указывать на следующий элемент массива arr[1], но адрес будет другим, 0x0012FE39, т.к. эти операции не просто тупо увеличивают адрес на единицу, а в зависимости от типа значений массива на нужное число байт. Размерность массива может быть любой, т.к. мы работаем с указателями. |
![]() ![]() |
![]() |
Текстовая версия | 21.08.2024 12:45 |