Комментарии:
Спасибо. Уровень!
Ответитьспасибо
ОтветитьСергей, помогите разобраться, почему если до main объявить массив и указатель на него, то в main возможно менять адрес указателя, а если этот указатель на глобальный массив объявить в main, но со словом static, то уже не можем? Почему позволяется менять адрес указателя, объявленного в глобальной области, если по идее, всё что объявлено вне main по умолчанию является статическим?
Вот так работает.
int a[] = {4,5,6};
int* p = a;
int main()
{
p +=1;
printf("%d", *p);
return 0;
}
А вот так не позволяет изменить адрес p.
int a[] = {4,5,6};
int main()
{
static int* p = a;
p +=1;
printf("%d", *p);
return 0;
}
А как работает например volatile?
ОтветитьСпасибо за урок.
1. В стандарте языка Си нет определений понятий "глобальная" и "локальная" переменная. Я думаю эти два термина ненаучны. Какое настоящее название?
2. Я правильно понял, что это есть три характеристики переменной: класс хранения (где выделить память), время жизни (когда деаллоцировать), и область видимости (откуда есть доступ)?
Отличный урок !!! Спасибо за изложения высшего класса. Отслеживаю весь ваш вклад в сообщество изучающих программирование в Ютубе.
Ответитьздравствуйте, у вас будут курсы по аналитике данных?
ОтветитьХотел увидел уроки по котлину в сравнении с пайтоном, чтоб преподавалрсь в сравнении.
И тот и тот язык очень лаконичный.
Когда вернётесь к урокам по Пайтону?
Ответить"в прототипе функции имена переменных можно опускать, т.к. для компилятора это не имеет никакого значения"
Да, но как говорится - есть нюанс.
Если в функции в качестве параметров используется двумерный массив переменной длины.
Например:
void funct(int n, int ar[][n])
и если в прототипе такой функции удалить имена параметров
void funct(int, int[][])
то будет ошибка компиляции, т.к. компилятор не сможет определить размерность массива.
Поэтому для этого существует такая форма записи прототипа:
void funct(int, int[][*])
Подушню. На самом деле ключевое сдово static не влияет на область видимости, т.к. никакой глобальной области видимости в Си нет🤪 (есть область видимости - блока, прототипа функции, функции, файла/единицы трансляции). А влияет на класс хранения, меняя у переменных определенных в блоке продолжительность хранения с автоматической на статическую, оставляя область видимости в пределах блока, и отсутствие связывания, а у переменных определенных вне функций - меняет внешнее связывание на внутренее, оставляя область видимости в пределах файла, и статическую продолжительность хранения.
ОтветитьСпасибо вам большое, за те видеоролики где вы на атомы расшипляеете материал и открываете основы программирования. Я студент программист из Украины, и пройдя ваши видеоуроки я стал на голову выше сверстников и преподавателей програмирования моего киевского вуза, но что более важно, стал смотреть на мир по другому, стал более аналитическим человеком. Спасибо вам, очень вас люблю 💜💜💜
ОтветитьВ Linux int var_main так же как и static var_st обе переменные будут равны нулю. В Windows int var_main выдаст "мусор". Спасибо огромное за урок ! Пояснение на высшем уровне.
ОтветитьДолжен ли я изучать язык программирования C перед изучением C++?
C++ мне нужен для изучения Unreal Engine