Подводя итог, вы в основном получите:
- Типизированные переменные
- Функции
- 1008 * Pointers *
- Стандартные библиотеки
Затем вы делаете все остальное - это может быть слишком упрощенно, но это грубое представление о том, с чем столкнуться.
Это может быть пугающе с самого начала, и может возникнуть необходимость преодоления кривой обучения. Вот несколько ударов скорости, с которыми вы можете столкнуться:
Строка? Какая строка?
Одна большая вещь, к которой нужно привыкнуть, это строки. В C. нет такой вещи, как string
. Строка - это "null
-определенный массив символов" (иногда называемый C строк ), который в основном означает массив типа char
с последний элемент - \0
(char
значение 0
).
В памяти массив char
длиной 4, содержащий Hi!
, будет выглядеть как:
char[0] == 'H'
char[1] == 'i'
char[2] == '!'
char[3] == '\0'
Кроме того, строки не знают своей собственной длины (нет таких вещей, как «объекты», которые поставляются бесплатно в C), поэтому потребуется использование стандартного библиотечного вызова strlen
, который более или менее for
цикл, который проходит через строку, пока не достигнет символа \0
. (Это означает, что это операция O (N) - чем длиннее строка, тем больше времени требуется, чтобы найти длину, в отличие от операции O (1) большинства реализаций string
в современных языках.)
Сборка мусора?
Нет такой вещи, как сборщик мусора в C. На самом деле вам нужно выделять и освобождать память самостоятельно:
/* Allocate enough memory for array of 10 int values. */
int* array_of_ints = malloc(sizeof(int) * 10);
/* Done with the array? Don't forget to free the memory! */
free(array_of_ints);
Невозможность очистки после выделения памяти может привести к тому, что называется утечки памяти , о которых, я уверен, вы слышали раньше.
Pointers!
И, как всегда, когда мы говорим о C, мы не можем забыть о указателях . Вся концепция ссылок на переменные и разыменовывающие указатели может быть серьезной концепцией, вызывающей головную боль, но как только вы ее освоите, это на самом деле не так уж и плохо.
За исключением тех случаев, когда вы ожидаете, что он будет работать в одну сторону, но вы обнаружите, что недостаточно хорошо понимали указатели, и на самом деле он делает что-то еще - как говорится, был там, сделал это.
О, и указатели, вероятно, будут одним из первых случаев, когда вы действительно увидите, что программный сбой настолько серьезен, что операционная система будет кричать на вас. ошибка сегментации - это не то, что компьютеру очень нравится .
Типы
Все переменные в C будут иметь типы. C - это статически типизированный язык , означающий, что типы переменных будут проверяться во время компиляции. Это может потребовать некоторого привыкания в начале, но также может рассматриваться как хорошая вещь, так как это может уменьшить ошибки времени выполнения, такие как ошибки типа, когда вы пытаетесь присвоить число строке.
Однако возможно выполнить typecasts , поэтому можно привести тип int
(которые являются целочисленными значениями) к типу double
(значение с плавающим типом). Однако невозможно попытаться привести int
непосредственно к строке, например char*
.
Так, например, на некоторых языках допускается следующее:
// Example of a very weakly-typed pseudolanguage with implicit typecasts:
number n = 42
string s = "answer: "
string result = s + n // Result: "answer: 42"
В C нужно было бы вызвать функцию itoa
, чтобы получить char*
представление int
, затем использовать strcat
для объединения двух строк. .
Заключение
Сказано, что изучение C на более высоком языке может быть очень откровенным и, вероятно, трудным для начала, но как только вы освоитесь, с ним будет довольно весело работать.
Я бы порекомендовал начать экспериментировать с компилятором C и иметь хорошую книгу или справочник.
Я думаю, что многие порекомендуют книгу K & R , которая действительно является превосходной книгой.
Сначала я не думал, что рекомендовать K & R в качестве первой книги по Си было бы хорошей идеей, потому что она может быть немного трудной, но, подумав второй, я думаю, что она очень всеобъемлющая и хорошо написанная книга, которая может быть полезна для C, если у вас уже есть опыт программирования.
Удачи!