Все ссылки на статьи и ролики моего канала Old Programmer:
Программирование. Тематическое оглавление моего Zen-канала (Old Programmer). А тут собраны все материалы по C и C++.
Читаем мои статьи, подписываемся на мой канал:
Сегодня поговорим о языке C, о некоторых его особенностях. Вот именно по этим особенностям (фишкам) и распознается настоящий программист-сишник. Я пришел к языку C, когда за плечами уже были другие языки. Поэтому в моих программах на C проскакивают время от времени выражения хоть и правильные с точки зрения синтаксиса, но выдающие меня с головой. Конечно, есть люди, которые критикуют использования специальных особенностей языка C. По их мнению это делает программу на языке C не понятной. Но я же пишу совсем о другом. О красоте программирования, об удовольствии программировать, о программировании, как искусстве. И здесь краткость - это сестра таланта.
Я уже писал об указателях в языке C (см. также здесь). Конечно это главная особенность языка. Из-за этой ее особенности язык C часто называют языком низкого уровня, близким к языку ассемблера. Ну не будем углубляться в терминологию, потому что интереснее программировать, чем спорить о терминах.
Роль чисел в языке C
Роль чисел в C крайне велика, я бы даже сказал, что в C все есть числа. Даже символы (тип char) легко превращаются в числа вот так char c='A'; int a; a=(int)c. Нет в C и строк, есть лишь массивы символов, конец которых отмечается символом с кодом 0. Нет в C и логических типов переменных. Все сводится опять к числам. Условные конструкции реагируют на нулевое значение как на false, а на не нулевое как на true. Поэтому настоящие программисты-сишники вместо if(a==0) пишут if(!a), а вместо if(a!=0) пишут if(a):
if(!a){
//что-то делаем
}else{
// что-то делаем
}
Еще одна особенность языка C отражена в программе main30a.c. Суть ее заключается в том, что выражение вида (a=b) равно присвоенному значению, т.е. значению переменной b. В программе main30a.c предполагаем, что вводимые числа положительны.
Инкремент и декремент в языке C
Инкремент (увеличение переменной на единицу) обозначается двумя плюсами, а декремент двумя минусами. Но многие ли знают что есть разница между ++i и i++. Можно написать a=++i и a=i++. В первом случае значение i будет увеличено на 1 и потом присвоено a, во втором случае наоборот. Глянем на программу ниже (main30.c). Типичный стиль C. Вычисляется сумма элементов массива. Она, как и ожидалось будет равна 15. А что будет, если вместо a[i++] мы запишем a[++i]? Правильно, результат будет равен 14. Вот такие дела.
Ну и, наконец, красивое копирование одной строки в другую, конечно
while(*s2++ = *s1++);
но при условии, что строка s1 заканчивается символом с кодом 0. Да, и не забудьте, что после операции оба указателя будут направлены на конец строк.
Тернарная условная конструкция в языке C
Тернарная условная конструкция имеет вид
условие?выражение1:выражение2
С помощью такой технологии можно создавать сложные алгоритмы, записываемые в строку. Например
a==b?printf("=\n"):a>b?printf(">\n"):printf("<=\n");
на консоли будет напечатано =, если переменные равны, > если a больше b, и <= в противном случае.
А вот еще пример на засыпку:
m=(a>b)?((a>c)?a:c):((b>c)?b:c);
Что получиться в результате? Догадались? Переменной m будет присвоено максимальное из трех чисел! Красиво, да?
Пока! Подписываемся на мой канал Old Programmer и программируем с удовольствием на C.