Объяснения супер!! Гена, обязательно продолжай этот проект! Я послушал все уроки до этого момента и потом посмотрел видео других вещателей по программированию на языке С. И имея правильную элементную базу в ПОНЯТИЯХ, начал замечать какие грубые ошибки допускают эти вещатели своих знаний в программировании. Видимо они понимают тему на уровне ЗАПОМИНАНИЯ (зазубривания) , а НЕ ПОНИМАНИЯ. Поэтому допускают недопустимые оговорки и не поправляются. Твоя манера донесения знаний педантична и строга к ОСНОВНЫМ ПОНЯТИЯМ, к азам. Молодец! В конечном итоге ты даешь такие знания, чтобы обучаемый ДУМАЛ и САМ отвечал на любой вопрос. А зная эти азы правильно произносил свои мысли. Это как в математике. Любую теорему нужно ПОНИМАТЬ. Только тогда ты произнесёшь правильно СВОИМИ СЛОВАМИ ЕЁ СУТЬ. И как правило произнесенное будет таким же как и сама теорема! В математике нет лишних слов!! )))
Я перерыл пол интернета - эти уроки лучшие! Огромный респект! Особенно порадовало углубление в информацию, я всегда задаюсь вопросами типа "а почему именно так?" наконец-то кто-то дает на них ясные ответы
Гена, огромное тебе человеческое спасибо, за этот труд и силы, которые ты вложил в эти уроки, объясняешь четко, все понятно, лично я обязательно просмотрю и платные твои видео, в общем, огромный респект за проделанную работу, с нетерпением жду новые выпуски.)
Начал изучать язык Си с Ваших видео. Не смотря на то, что слишком затянуто, всё очень доходчиво и понятно, за это огромное спасибо. За пару вечеров просмотрел все Ваши 14 видео на эту тему. Но учитывая, что разница во времени выхода 1го и 14го видео-уроков больше полутора лет, то оставил надежду освоить Си исключительно на Ваших видео, т.к. за это время мы прошли пару-тройку глав любого самоучителя. Дальше, судя по всему, на эти самоучители-то вся и надежда. Что, конечно, затруднит освоение языка. В любом случае, Гена, Вам благодарность за труды.
Хорошая аналогия. Пример с расчетным счетом в банке. Переменная в данном случаи это наличность в бумажном виде, банкноты. Мы можем увеличить наличность(изменять значение переменной), то есть взять валютой 100 дол и положить в банк (увеличить переменную на единицу например). А указатель был бы доступ к расчетному счету в банке посредством кредитной карты, то есть фактически кредитная карта была бы ключем(адресом) к ячейке в банке где храниться наличность (переменная). И с помощью кредитной карты мы можем увеличивать наличность(изменять переменную) или проводить иные операции. Надеюсь инфа будет полезна, мне лично по такому примеру было понятнее.
Спасибо тебе большое! Ты не представляешь как я благодарен тебе, не было ни одного момента, чтобы я что-то не понял, смотря это видео! Очень нравится что ты постоянно повторяешь одну и ту же информацию, так очень хорошо запоминается она))
E:\Courses\C\programs\lesson14>gcc Program.c -o Program.exe E:\Courses\C\programs\lesson14>Program.exe One varible: 1 Two varible: 2 Three varible: 3 One address: 0x2752291 Two address: 0x2752290 Three address: 0x2752289 One velue: 1 Two velue: 2 Three velue: 3 One pointer: 10 Two pointer: 20 Three pointer: 30 One varible: 10 Two varible: 20 Three varible: 30 E:\Courses\C\programs\lesson14> Гена огромное тебе спасибо, много чего уже изучил благодаря тебе.
Около двух недель как начал вникать в программирование, и уже такой результат - 44 строки кода. Это успех!! И все благодаря Вам (друзья советовали 👌🏻) Очень клево подана информация, прям до мозга костей... Особенно откладывается при повторение в конце урока и потом практика( хотя и подглядываю в😝 конспект ) Такая себе "эйфория" наступает в момент, когда разобрался с программой/её кодом/написанием/особенностями. Благодарю за уроки!! Продолжайте В ТОМ же духе, пожалуйста 😊
Изучал я Си по книжке, все шло нормально до темы "указатели", тут то мне не всё стало понятно, и я решил обратиться к интернету, где и нашел твой канал. Так же решил пересмотреть все видео Си самого начала, хоть уже и имел представление о Си. Хочу лишь сказать, что сильно тебе благодарен за разжеванное объяснение всех тем, в особенности "указатели". Жду с нетерпением твоих уроков.
Все еще не могу понять, зачем нужно указывать тип переменной в декларировании указателя. Ведь по сути мы декларируем переменную, которая хранит адрес. Может нужно указывать тип char в декларировании указателя, чтобы указатель знал, что переменная, на которую он указывает, занимает 1 байт? Тогда если указатель указывает на тип int (а он занимает 4 байта), то нужно указать в декларировании этого указателя тип int*, тогда указатель будет хранить адрес первого байта переменной и будет знать, что его переменная занимает еще 3 байта после данного, а это, в свою очередь, нужно для корректного разименования. Надеюсь, понятно объяснил. Так я правильно понимаю?
Ладно, постараюсь покороче. В декларации указателя для переменной типа short: "short* varP = &var" нужно указывать тип short только для того, чтобы при операции "printf("%i", *varP)" компилятор знал, что выводить нужно число, содержащееся в указанной ячейке памяти и размером 2 байта(тип short). Если не указывать тип, то компилятор не знает, сколько цифр нужно выводить, начиная от указанного бита. Я правильно понимаю?
The Nikitosios! Тип - это размер в байтах, выделенный для хранения данных / значений. В целом вы верно написали. Смотрите уроки от начала, и таких вопросов не будет.
Спасибо огромное автору за такое детальное разжевывание материала! Не знаю что и кому не нравится в повторении автора, лично мне так гараздо лучше запоминать :) За 4 дня добрался вот до Указателей, и мне не сильно сложно все дается благодаря повторениям Генадия. Спасибо!
После объяснений в универе я думал, что это слишком сложно для меня. Но благодаря вам, я понял, что это элементарно. Просто нужно уметь объяснять, с чем вы прекрасно справляетесь. Спасибо за урок
Очень благодарен Каналу очень чётко и ясно. Хотя я учусь в универе на инженер программиста но так как здесь не объясняют просто говорят бери методичку и работай как что где не понятно.👍 Молодец.
Спасибо, урок очень понятный. Указатели это то на чем я споткнулся, когда читал учебник, а тут все понятнее не куда, да и любой момент можно всегда пересмотреть. СПАСИБО.
Дорогой Gena ANTG! Спасибо за начальный (вводный) курс программирования на Си! Было очень интересно, было познавательно и поучительно. Очень жаль, что не видно продолжения дальнейшего обучения. А ведь Вы говорили, что затем будут темы массивов и строк. Если продолжение следует, то пишите. А пока придется приступить к штудированию языка по учебникам. Это не составит огромного труда (я когда-то учил и язык VB и Asm). Но подобные лекции лучше способствуют усвоению материала. Еще раз огромное спасибо за начальный толчок в изучении языка программирования Си!
хахаха "Я буду повторять пока вы не устанете..." Меня на этом моменте прорвало )))). Молодец автор, так и нужно объяснять программирование с нуля, потому что вроде кажется что все понял с первого раза, садишься сам писать, и по любому начинаются проблемы! Держи пять! Считаю, что эти курсы - отличная база, перед тем, как садиться читать серьезную литературу.
Доброго времени суток, уроки действительно интересные, хорошо раскрывается теория. иногда даже в ВУЗах упускают некоторые важные моменты о которых говорит автор, радует, что столько повторения. Для новичков теории очень много(для самоучек), но для тех кто уже учится где-то не хватает практики, каких-то конкретных задач, чтобы не просто закрепить теорию, а по максимуму в неё вникнуть, каких-то нестандартных заданий возможно, более мудрёных что-ль, может целый урок посвятить всяким задачкам, этого не хватает...
Кто жалуется на повторение материала, просьба сходите на курсы по языку Си, там никто с вами возиться не будет. Что то не понял?? Расберешься дома!!! xDD
Я железячник и про указатели и адреса памяти ОЗУ (RAM) мне несложно было понять . Спасибо за уроки , некоторые конечно неоправдано большие ,НО это даёт РЕАЛЬНОЕ ПОНИМАНИЕ темы , не все ведь изначально что то знают , и как говорится "ПОВТОРЕНИЕ - МАТЬ УЧЕНИЯ ."
хорош! четко поясняешь... отметить могу одну особенность - повторяешь одно и то же несколько раз (кого то может задолбать .... но на самом деле работает! в бошку инфа так вбивается что до смери не забудишь))));)
Спасибо за уроки. Всё здорово. Уроки просто супер. Однако сложно обучаться когда уроки выходят с таким разрывом. Было бы здорово если бы уроки выходили чаще. Ещё раз спасибо.
pointers are not easy to understand, many teachers fail to explain this subject correctly. but i must admit ,your explanation is very good, very detailed. I study computer science in college and i wish we had a teacher who explains C like you do. Keep up the good work man! I just got +1 subscriber! =)
Имеет ли смысл выражение &onePobyter ? Т.е. адрес ячейки памяти в которой хранится значение указателя. И надо ли обнулять значение &onePointer ли прежде чем вывести его на printf ?
&onePointer был для простоты примера, смысла делать указатель на переменную нет, а вот на структуры, массивы и функции - да. Если ты его обнулишь, то и выводить будет нечего )
Геннадий, спасибо! Никогда бы самостоятельно не начал с такого подхода который внушаете нам Вы!) Чертовски приятно осознавать что есть еще люди готовые так дотошно и доходчиво объяснять. У вас талант учителя.Никогда не предполагал что в 32 сяду за Си и буду получать удовольствие от его изучения)) Пожалуйста, ответьте на два вопроса: 1 ) Как скоро выйдут еще видео? 2) Что точно можно читать и по чему учиться разрешается? ПС с нетерпением ждем и платных курсов.
Добрый день. Я занимаюсь по этим урокам в Visual Studio и возник следующий вопрос: Когда я вывожу через printf адреса ячеек &one, &two, &three - и использую %X, программа при каждой компиляции выводит новые значения и ругается, что бы %X заменили на %p. Вопрос в следующем, чем отличается %X от %p и почему при каждой новой компиляции выводятся новые адреса ячеек (раз они не зарезервированы в памяти до отключения программы)?
В более старых версиях компилятора не было спецификатора %p, он предназначен для вывода адресов, %X - выводит данные в шестнадцатиричном формате. Для вывода адресов используйте %p.
Спасибо!!! Есть проблемка под WIN все работает под LINUX выдает ошибку warning: format ‘%X’ expects argument of type ‘unsigned int’, but argument 3 has type ‘char *’ [-Wformat=] printf("%cOne adress: 0x%X%c", EOL, onePointer, EOL); где ошибка???
Не получается адрес вывести на экран MAC OS в чем проблема:? вот ошибка warning: format specifies type 'unsigned int' but the argument has type 'char *' [-Wformat] printf("%cOne adress: 0x%X%c",EOL, onePointer, EOL); но если вместо %X поставить %P адрес выводит, но каждый раз разный ...
+Nick S %x - формат для шестнадцатиричных чисел, а %p - для адресов памяти, адреса могут меняться после компиляции програмы(одни освобождаются, другие занимаются под процессы и т.д). Вы все правильно делаете.
Гена, поясни пожалуйста, почему при работе с командной строкой, и компилятором на винде , при выводе *указателя, можно указывать маркер %Х или %Х0, или %d, а убунту выдаёт ошибку с теми же маркерами, и только допускается маркер %p. Получается, на убунту всё строже, соответственно сложнее работать... Думал наоборот. Или дело в стандартах? Запутался. Спасибо.
Приветствую! Дело в версии компилятора и стандартах языка Си по-умолчанию. Просто проверьте версию компилятора на Windows и Ubuntu. И используйте флаг -std=c99 во время компиляции. Вместо c99 могут быть, c89(ansi c), c11, c18
@@ANTGPRO Спасибо. Версии компилятора сверил. Они идентичны. А с флагом -std=c99 не разобрался. На каком именно этапе или в какой последовательности его вписывать при компиляции в командную строку?
@@rickrick2909 gcc app.c -o app.exe -std=c18 -Wall -Wextra -Wpedantic, и для вывода адресов используйте %p, %x и %X - отвечают за вывод чисел в 16-ричном формате. Раньше флага %p не было, поэтому использовали %x.
Если мы создаем 500 переменных , то нужно создавать и 500 указателей для их хранения. То есть , в любом случае в 2 раза переполняем память , разве нет ?
Gena ANTG ПРивет, у меня вопрос есть. Есть строка stroka[8]. В ней записаны лат буквы, наприпер 'asdasdb'. Мне нужно превратить букву 'b' в букву 'c'. Как это сделать? Мне нужно написать программу которая будет подбирать пароли. Мне удалось выяснить с помощью команды char() код той или иной буквы, но не получается заменить их. Как это сделать?
Иван Носков Зачем тебе заменять буквы в строке при подборе? Создай новый массив и клади туда совпавшие буквы. А проход делай по алфавиту. Думай. Подсказку я тебе дал. Только если пароль будет захэширован, тебе такой метод ничего не даст. Нужно знать каким алгоритмом захэширован пароль. И начинать перебор, постоянно прогоняя измененную строку через хэш-алгоритм.
Гена. Спасибо огромное за уроки по Си. Очень хорошо всё объяснено, хоть и с излишними повторами, но зато понятно. Однако у меня есть пара вопросов по этому видео: В одном из предыдущих видео ты говорил, что переход на след строку под управлением Windows правильнее осуществлять " ", однако в этом видео переходишь символом ' '. Объясни пожалуйста почему так. И правильно ли я понял, что объявление константы ' ' в данном случае немного экономит ОП (Однако писать приходится больше, что в свою очередь увеличивает размер самой программы)?
+Олег Леонтьев для windows привльнее . Но как видите, проблем в данном случае нет. А когда они возникут, вы будете знать, как написать более грамотно и это спасет ситуацию. Константа для примера, в данном случае можно было написать просто . А так, да, вы все верно описали и правильно поняли.
Доброго времени суток. Такой вопрос под Win работает но под Linux выдает ошибку 16.c: In function ‘main’: 16.c:33:11: warning: format ‘%X’ expects argument of type ‘unsigned int’, but argument 3 has type ‘char *’ [-Wformat=] printf("%cOne adress: 0x%X%c", EOL, onePointer, EOL);
Гена, подскажи, плиз. Выходит такая ошибка(что-то с маркером %x): warning: format ‘%x’ expects argument of type ‘unsigned int’, but argument 3 has type ‘char *’ [-Wformat=] printf("%c One address: 0x%x%c", EOL, onePointer, EOL);
Та же проблема.Побробовал использовать %p,адрес вывело нормально, но почему не работает %x не знаю.Почитал материалы на эту тему и там для указателей рекомендуют использовать %p.
Гена, спасибо за отличный урок! Я так понимаю что warnings в windows просто не отрабатывает при компиляции? Я на "Linux Mint 17 X86" получаю проcто море ворнингов когда следую пошагово за тобой :) (время на видео 1:16:00) Пример: /home/ruslan/Dropbox/PROGRAMMING LANGUAGES/C/Learn with Gena ANTG/ukazateli.c: In function ‘main’: /home/ruslan/Dropbox/PROGRAMMING LANGUAGES/C/Learn with Gena ANTG/ukazateli.c:23:2: warning: format ‘%X’ expects argument of type ‘unsigned int’, but argument 2 has type ‘char *’ [-Wformat=] printf("One address: 0x%X%c", onePointer, EOL); ^ /home/ruslan/Dropbox/PROGRAMMING LANGUAGES/C/Learn with Gena ANTG/ukazateli.c:24:2: warning: format ‘%X’ expects argument of type ‘unsigned int’, but argument 2 has type ‘char *’ [-Wformat=] printf("Two address: 0x%X%c", twoPointer, EOL); ^ /home/ruslan/Dropbox/PROGRAMMING LANGUAGES/C/Learn with Gena ANTG/ukazateli.c:25:2: warning: format ‘%X’ expects argument of type ‘unsigned int’, but argument 2 has type ‘char *’ [-Wformat=] printf("Three address: 0x%X%c%c", threePointer, EOL, EOL); ^ One variable: 1 Two variable: 2 Three variable: 3 One address: 0xBF8920F1 Two address: 0xBF8920F2 Three address: 0xBF8920F3 [Finished in 0.0s with exit code 27] [shell_cmd: gcc -std=c99 "/home/ruslan/Dropbox/PROGRAMMING LANGUAGES/C/Learn with Gena ANTG/ukazateli.c" -o "/home/ruslan/Dropbox/PROGRAMMING LANGUAGES/C/Learn with Gena ANTG/ukazateli" && "/home/ruslan/Dropbox/PROGRAMMING LANGUAGES/C/Learn with Gena ANTG/ukazateli"] [dir: /home/ruslan/Dropbox/PROGRAMMING LANGUAGES/C/Learn with Gena ANTG] [path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games] Т.е. моему gcc не нравится ни void main ни char ))
Ruslan Krucheniuk Да, все верно, MinGW по умолчанию не отрабатывает warnings. Это не критично сейчас. Я просто знакомлю начинающих с базой. Все будет четко, когда мы перейдем на семейство linux-систем.
Супер ваши уроки отличные и доходчивые. Простите за мой вопрос а когда вы выпустите видеоурок про массивов. К сожалению завтра экзамен по програмировании. Было бы отлично если у вас был бы.
Настолько глубокое понимание синтаксиса языка и умение объяснить! Это стоит большого уважения! Скажите, а столько по времени вы учили, учите язык C. чтобы быть на таком уровне? И ещё вопрос, я изучаю язык C , я понимаю, что на это нужно много времени! Вопрос в том, как ещё уложится во времени, чтобы после изучить другие языки такие, как питон, не говоря уже про С++? На это же нужны годы и годы, чтобы полностью пропустить язык через себя! Как действовать, можете наметить хоть немного карту, кроме того, что нужно пройти ваши курсы!
Приветствую! Да, нужны годы на то, чтобы стать специалистом. Сейчас я записываю платные курсы, которые помогут освоить профессию. Все заточено под практические задачи и реальные проекты. Можете посетить сайт: antg.pro, либо же освоить бесплатные уроки на канале. Желаю удачи!
Замечательные уроки, все очень доступно и понятно! Спасибо Вам огромное! Единственная претензия - уж очень они длинные. Это очень мешает усвоению материала. Несколько коротких уроков перевариваешь лучше, чем один большой. Но все настолько разжевано, что даже этот минус становится незначительным. Продолжайте в том же духе!
Вместо того, что получилось на 1:12:50, вышло почему-то: One variable: 1 Two variable: 2 Three variable: 10 После последней строки переноса не произошло. Это на виндовс 10 домашняя, x64. А когда добавил строки для вывода адресов, то всё наладилось при выводе.
Вопрос: т.е. если я задаю значение переменной один раз, например short one = 1; short two = 2; short three = 3; под это выделяется память, а потом, мне нужно поменять эти значения, например на one = 11; two = 22; three = 33; то под это выделяется новая ячейка памяти, при том, что старая хранит еще первые значения и таким образом тратятся доп ресурсы комп, я правильно понимаю? Поэтому гораздо удобней переназначать переменные через указатели? Потому что он как бы затирает предыдущие значения и вписывает туда новые?
посмотрел этот урок и у меня появился вопрос вот такова содержания.Если поинтер это переменная которая хранит в себе адрес другой переменно то кто хранит адрес поинтера и его переменной?
Здравствуйте, подскажите, пожалуйста, как выделяется память под массив указателей? Мы вводим кол-во элементов в массиве указателей( то есть количество указателей в массиве указателей) с клавиатуры. Тогда как выделяется память под массив указателей? Преподаватель сказал не использовать малок и калок и объяснить как в таком случае будет выделяться память. Заранее спасибо за ответ. …. int n; printf("enter n"); scanf("%d",&n); char strings[100][100]; char* array[n];
printf(" Rows to sort: "); for (int i = 0; i < n; i++) { printf("%d-> ", i + 1); scanf("%s", strings[i]); }
for (int i = 0; i < n; i++) { array[i]=strings[i]; } ….
Спасибо за уроки. Заметил такой момент - маркер %x у меня не сработал - терминал выдает ошибку. Нашел на stackoverflow.com ответ - использовать %p. Только в этом случае получил адреса (линукс минт 64)
+dractw Думал об этом, я за )) но сначала запустим сайт )) Если делать стрим, то с донатом, моя такая позиция или по подписке. Еще обсудим на нашем сайте этот вопрос.
Геннадий спасибо большое, за уроки просто супер! Хотела корректирующий вопрос задать по указателям, там где проходит разименование указателя oneResult = *onePointer, что здесь хранится значение или адрес в переменной oneResult?
Очень хорошо объяснён материал , лучше уроков пока ещё нигде не встречал . Спасибо огромное ! Хотел спросить есть ли уже тесты по этому материалу , если есть , то где ? Очень хотелось бы проверить свои знания :) Ещё раз огромное спасибо и респект за проделанную вами работу!
Автор, в этом и прошлом уроке с константами вы упустили момент, который меня заинтересовал. А именно определяя командой препроцессора константы, и объявляя указатель, который является так же обычной переменной, каким образом определяется их тип? ведь если предположить, что указатель принимает тот же тип, что и переменная char, то при объёме RAM более 255 ячеек, указатель уже не сможет корректно содержать адрес переменной. Спасибо.
Добрый вечер! позвольте спросить, у меня при выведении адреса переменных, терминал выводит ошибку следующим образом : format specifies type 'unsigned int' but the argument has type 'char *' [-Wformat] printf("Two address: 0x%X%c", twoPointer, EOL); ~~ ^~~~~~~~~~ %s Может это от того, что у меня типы данных главной функции int? Вместо char пробовала использовать unsigned int, но все равно ошибка; Может формат hexadecimal с printf на маке представляется по другому? я попробовала найти альтернативу X но что то везде пишут что будет X. Пробовала и s, но там терминал выводит только Ох и все
@@ANTGPRO спасибо! вместо Х использовала p, и получилось вот что: One address: 0x7ffeeba06b4b Two address: 0x7ffeeba06b4a Three address: 0x7ffeeba06b49 это правильно?
🚀 Подписывайся на мой канал в Telegram: @antg_official
🚀 И заходи на сайт: antg.pro!
1:29:13 "Я буду повторять пока вы не устанете." Повторю, что ты просто лучший. красавкчик. просто Бог. спасибо большое за этот курс!
Объяснения супер!! Гена, обязательно продолжай этот проект! Я послушал все уроки до этого момента и потом посмотрел видео других вещателей по программированию на языке С. И имея правильную элементную базу в ПОНЯТИЯХ, начал замечать какие грубые ошибки допускают эти вещатели своих знаний в программировании. Видимо они понимают тему на уровне ЗАПОМИНАНИЯ (зазубривания) , а НЕ ПОНИМАНИЯ. Поэтому допускают недопустимые оговорки и не поправляются. Твоя манера донесения знаний педантична и строга к ОСНОВНЫМ ПОНЯТИЯМ, к азам. Молодец! В конечном итоге ты даешь такие знания, чтобы обучаемый ДУМАЛ и САМ отвечал на любой вопрос. А зная эти азы правильно произносил свои мысли. Это как в математике. Любую теорему нужно ПОНИМАТЬ. Только тогда ты произнесёшь правильно СВОИМИ СЛОВАМИ ЕЁ СУТЬ. И как правило произнесенное будет таким же как и сама теорема! В математике нет лишних слов!! )))
Я перерыл пол интернета - эти уроки лучшие! Огромный респект!
Особенно порадовало углубление в информацию, я всегда задаюсь вопросами типа "а почему именно так?"
наконец-то кто-то дает на них ясные ответы
Гена, огромное тебе человеческое спасибо, за этот труд и силы, которые ты вложил в эти уроки, объясняешь четко, все понятно, лично я обязательно просмотрю и платные твои видео, в общем, огромный респект за проделанную работу, с нетерпением жду новые выпуски.)
+Егор Тюриков Спасибо большое ))
+Gena ANTG и от меня огромное спасибо. Хотелось бы узнать, когда появятся новые видео, а также на счет сайта и платных курсов. Заранее благодарю.
ada dasda Сайт будет очень скоро! Видео будут на днях, над курсом идет работа ;) Подробная информация по продвинутому курсу будет на сайте.
Начал изучать язык Си с Ваших видео.
Не смотря на то, что слишком затянуто, всё очень доходчиво и понятно, за это огромное спасибо.
За пару вечеров просмотрел все Ваши 14 видео на эту тему.
Но учитывая, что разница во времени выхода 1го и 14го видео-уроков больше полутора лет, то оставил надежду освоить Си исключительно на Ваших видео, т.к. за это время мы прошли пару-тройку глав любого самоучителя.
Дальше, судя по всему, на эти самоучители-то вся и надежда. Что, конечно, затруднит освоение языка.
В любом случае, Гена, Вам благодарность за труды.
Геннадий, не перестану благодарить за ваш труд! Спасибо большое! Очень доступно!
Генадий, спасибо за все ваши уроки по програмированию на С.
Вы объясняете очень доступно и понятно.
Хорошая аналогия. Пример с расчетным счетом в банке. Переменная в данном случаи это наличность в бумажном виде, банкноты. Мы можем увеличить наличность(изменять значение переменной), то есть взять валютой 100 дол и положить в банк (увеличить переменную на единицу например). А указатель был бы доступ к расчетному счету в банке посредством кредитной карты, то есть фактически кредитная карта была бы ключем(адресом) к ячейке в банке где храниться наличность (переменная). И с помощью кредитной карты мы можем увеличивать наличность(изменять переменную) или проводить иные операции. Надеюсь инфа будет полезна, мне лично по такому примеру было понятнее.
А ты хорош) Так понятно даже некоторые преподаватели ВУЗов не могут объяснять.
Добрый день.
Хочу Вас поблагодарить за прекрасные видео уроки. Это поистине великий труд.
Думаю, что все с нетерпением ждут от Вас новых tutorials
Спасибо тебе большое! Ты не представляешь как я благодарен тебе, не было ни одного момента, чтобы я что-то не понял, смотря это видео! Очень нравится что ты постоянно повторяешь одну и ту же информацию, так очень хорошо запоминается она))
E:\Courses\C\programs\lesson14>gcc Program.c -o Program.exe
E:\Courses\C\programs\lesson14>Program.exe
One varible: 1
Two varible: 2
Three varible: 3
One address: 0x2752291
Two address: 0x2752290
Three address: 0x2752289
One velue: 1
Two velue: 2
Three velue: 3
One pointer: 10
Two pointer: 20
Three pointer: 30
One varible: 10
Two varible: 20
Three varible: 30
E:\Courses\C\programs\lesson14>
Гена огромное тебе спасибо, много чего уже изучил благодаря тебе.
+Фирузджон Миров Рад что все получается )
Около двух недель как начал вникать в программирование, и уже такой результат - 44 строки кода.
Это успех!!
И все благодаря Вам (друзья советовали 👌🏻)
Очень клево подана информация, прям до мозга костей...
Особенно откладывается при повторение в конце урока и потом практика( хотя и подглядываю в😝 конспект )
Такая себе "эйфория" наступает в момент, когда разобрался с программой/её кодом/написанием/особенностями.
Благодарю за уроки!!
Продолжайте В ТОМ же духе, пожалуйста 😊
Пересмотрел еще раз уроки. Нашел для себя много нового!
Изучал я Си по книжке, все шло нормально до темы "указатели", тут то мне не всё стало понятно, и я решил обратиться к интернету, где и нашел твой канал. Так же решил пересмотреть все видео Си самого начала, хоть уже и имел представление о Си. Хочу лишь сказать, что сильно тебе благодарен за разжеванное объяснение всех тем, в особенности "указатели". Жду с нетерпением твоих уроков.
+Саня Чапковский Спасибо!))
Спасибо! Молодец хорошо рассказываешь, хоть понятно, что к чему!
Пожалуйста! ))
Все еще не могу понять, зачем нужно указывать тип переменной в декларировании указателя. Ведь по сути мы декларируем переменную, которая хранит адрес. Может нужно указывать тип char в декларировании указателя, чтобы указатель знал, что переменная, на которую он указывает, занимает 1 байт? Тогда если указатель указывает на тип int (а он занимает 4 байта), то нужно указать в декларировании этого указателя тип int*, тогда указатель будет хранить адрес первого байта переменной и будет знать, что его переменная занимает еще 3 байта после данного, а это, в свою очередь, нужно для корректного разименования. Надеюсь, понятно объяснил. Так я правильно понимаю?
The Nikitosios! Мы брали адреса переменных для простоты примера. Текст не осилил, просьба писать лаконичнее, если это вопрос.
Ладно, постараюсь покороче.
В декларации указателя для переменной типа short:
"short* varP = &var"
нужно указывать тип short только для того, чтобы при операции
"printf("%i", *varP)"
компилятор знал, что выводить нужно число, содержащееся в указанной ячейке памяти и размером 2 байта(тип short). Если не указывать тип, то компилятор не знает, сколько цифр нужно выводить, начиная от указанного бита. Я правильно понимаю?
The Nikitosios! Тип - это размер в байтах, выделенный для хранения данных / значений. В целом вы верно написали. Смотрите уроки от начала, и таких вопросов не будет.
Спасибо огромное автору за такое детальное разжевывание материала! Не знаю что и кому не нравится в повторении автора, лично мне так гараздо лучше запоминать :) За 4 дня добрался вот до Указателей, и мне не сильно сложно все дается благодаря повторениям Генадия. Спасибо!
Пожалуйста) Рад что все понятно.
автор талантлив не только как программист, но и как дизайнер:) отдельный лайк за заставку:)
Haji Haydarov Спасибо ))
После объяснений в универе я думал, что это слишком сложно для меня. Но благодаря вам, я понял, что это элементарно. Просто нужно уметь объяснять, с чем вы прекрасно справляетесь. Спасибо за урок
// Хорошо объясняеш, за такие уроки охото заплатить!
держи Ь
в описании под роликами он оставляет номер карты сбера, вот тебе возможность поблагодарить
Gena, спасибо тебе большое и за этот канал, заработаю денег куплю курс для тех кто чуть больше знает
Hello from Korea, Спасибо! Объяснения супер!
Очень благодарен Каналу очень чётко и ясно. Хотя я учусь в универе на инженер программиста но так как здесь не объясняют просто говорят бери методичку и работай как что где не понятно.👍 Молодец.
Фридом, ну как твоя учеба сейчас?
Шикарные курсы! Все ясно и понятно! Жду не дождусь массивы)
Спасибо за курс! Пожалуйста, продолжай снимать уроки!
Действительно подход крутой! В плане объяснения у тебя талант! Ждем продвинутых курсов, где будет действительно крутое программирование!
+Дмитрий Пустовойтенко Спасибо!)) Да, в продвинутом будет много практики.
толково, сначала повторения кажутся слишком ненужными, на деле все правильно. из того что есть в интернете по Си лучшее. ждем продолжения.
константин корелов Спасибо большое!
Pirotexnik 7 скоро ))
Pirotexnik 7 Май ))
Все просто супер! Продолжай в том же духе!
Bober Спасибо! ))
Спасибо, урок очень понятный. Указатели это то на чем я споткнулся, когда читал учебник, а тут все понятнее не куда, да и любой момент можно всегда пересмотреть. СПАСИБО.
Пожалуйста ))
Дорогой Gena ANTG! Спасибо за начальный (вводный) курс программирования на Си! Было очень интересно, было познавательно и поучительно. Очень жаль, что не видно продолжения дальнейшего обучения. А ведь Вы говорили, что затем будут темы массивов и строк. Если продолжение следует, то пишите. А пока придется приступить к штудированию языка по учебникам. Это не составит огромного труда (я когда-то учил и язык VB и Asm). Но подобные лекции лучше способствуют усвоению материала. Еще раз огромное спасибо за начальный толчок в изучении языка программирования Си!
Молодец. Столько терпения все это разжёвывать!...
Очень жду) Объяснения на высшем уровне !!! +
красавчик слов нет одни иммоции само собой положительные
хахаха "Я буду повторять пока вы не устанете..." Меня на этом моменте прорвало )))). Молодец автор, так и нужно объяснять программирование с нуля, потому что вроде кажется что все понял с первого раза, садишься сам писать, и по любому начинаются проблемы! Держи пять! Считаю, что эти курсы - отличная база, перед тем, как садиться читать серьезную литературу.
Спасибо! ))
Спасибо тебе большое. Очень хорошо всё объяснил, я наконец то всё понял)))
Пожалуйста ))
Чувак ну не пропадай!
я тут и работаю над контентом )
Спасибо! Хорошо объяснил
Доброго времени суток, уроки действительно интересные, хорошо раскрывается теория. иногда даже в ВУЗах упускают некоторые важные моменты о которых говорит автор, радует, что столько повторения.
Для новичков теории очень много(для самоучек), но для тех кто уже учится где-то не хватает практики, каких-то конкретных задач, чтобы не просто закрепить теорию, а по максимуму в неё вникнуть, каких-то нестандартных заданий возможно, более мудрёных что-ль, может целый урок посвятить всяким задачкам, этого не хватает...
спасибо Гена за видео! я сегодня единственная в группе сделала задание правильно и это только благодаря тебе :)
Очень рад )
как твоя учеба? закончила универ уже?
Кто жалуется на повторение материала, просьба сходите на курсы по языку Си, там никто с вами возиться не будет.
Что то не понял?? Расберешься дома!!! xDD
Спасибо большое! Жду продолжения!)
super lessons! thank you very much indeed!
прослушав на второй раз все поняла! супер!!!!
1:26:41 даже если в ячейке хранится мусор - адрес ячейки от этого не меняется, указатель в любом случае будет указывать на конкретную ячейку.
Я железячник и про указатели и адреса памяти ОЗУ (RAM) мне несложно было понять . Спасибо за уроки , некоторые конечно неоправдано большие ,НО это даёт РЕАЛЬНОЕ ПОНИМАНИЕ темы , не все ведь изначально что то знают , и как говорится "ПОВТОРЕНИЕ - МАТЬ УЧЕНИЯ ."
Крутой урок.Очень доступно!!!!!!
Гена ты красава!!!
Спасибо, очень доходчиво
Когда будет продолжение ?
27:46 Если переменная типа char, на которую ссылается указатель, хранит символ, то вовремя обявления указателя нужно добавлять unsigned?
Приветствую! Нет.
хорош! четко поясняешь... отметить могу одну особенность - повторяешь одно и то же несколько раз (кого то может задолбать .... но на самом деле работает! в бошку инфа так вбивается что до смери не забудишь))));)
))
спасибо вам большое за уроки
Знаете,все-таки было бы очень неплохо после каждого урока задавать какое-нибудь задание на отработку)
Спасибо за уроки. Всё здорово. Уроки просто супер. Однако сложно обучаться когда уроки выходят с таким разрывом. Было бы здорово если бы уроки выходили чаще. Ещё раз спасибо.
+Юрий Иванов Вам спасибо!
Когда будут новые видео?
Когда будит новая серия
pointers are not easy to understand, many teachers fail to explain this subject correctly.
but i must admit ,your explanation is very good, very detailed. I study computer science in college and i wish we had a teacher who explains C like you do.
Keep up the good work man!
I just got +1 subscriber! =)
*you just got +1 subscriber..
спасибо! очень хорошо объясняешь.
Имеет ли смысл выражение &onePobyter ? Т.е. адрес ячейки памяти в которой хранится значение указателя. И надо ли обнулять значение &onePointer ли прежде чем вывести его на printf ?
&onePointer был для простоты примера, смысла делать указатель на переменную нет, а вот на структуры, массивы и функции - да. Если ты его обнулишь, то и выводить будет нечего )
Геннадий, спасибо! Никогда бы самостоятельно не начал с такого подхода который внушаете нам Вы!)
Чертовски приятно осознавать что есть еще люди готовые так дотошно и доходчиво объяснять. У вас талант учителя.Никогда не предполагал что в 32 сяду за Си и буду получать удовольствие от его изучения))
Пожалуйста, ответьте на два вопроса:
1 ) Как скоро выйдут еще видео?
2) Что точно можно читать и по чему учиться разрешается?
ПС с нетерпением ждем и платных курсов.
В свободном доступе нет отдельно презентации?
Нет, хотел загрузить, но потом забыл ))
Вот теперь, наконец, понятно. Спасибо!
Отличный урок
Добрый день.
Я занимаюсь по этим урокам в Visual Studio и возник следующий вопрос:
Когда я вывожу через printf адреса ячеек &one, &two, &three - и использую %X, программа при каждой компиляции выводит новые значения и ругается, что бы %X заменили на %p.
Вопрос в следующем, чем отличается %X от %p и почему при каждой новой компиляции выводятся новые адреса ячеек (раз они не зарезервированы в памяти до отключения программы)?
В более старых версиях компилятора не было спецификатора %p, он предназначен для вывода адресов, %X - выводит данные в шестнадцатиричном формате. Для вывода адресов используйте %p.
@@ANTGPRO Понял, благодарю.
Добрый день,
Гена, можешь пожалуйста подсказать среду разработки для линукс, о которой ты упоминал?
+Daniel Komnin Тут на выбор: можно Dev++, CodeBlocks, даже VisualStudio уже работает под Linux:
www.visualstudio.com/products/code-vs
Спасибо!!! Есть проблемка под WIN все работает под LINUX выдает ошибку warning: format ‘%X’ expects argument of type ‘unsigned int’, but argument 3 has type ‘char *’ [-Wformat=]
printf("%cOne adress: 0x%X%c", EOL, onePointer, EOL); где ошибка???
У меня тоже самое получается(( но если вместо %X написать %p, то компилятор не ругается, но выводит адрес ячейки немного по-другому.
Код пишу в Ubuntu
Используйте %p.
Не получается адрес вывести на экран MAC OS в чем проблема:? вот ошибка warning: format specifies type 'unsigned int' but the argument has type 'char *'
[-Wformat]
printf("%cOne adress: 0x%X%c",EOL, onePointer, EOL);
но если вместо %X поставить %P адрес выводит, но каждый раз разный ...
+Nick S %x - формат для шестнадцатиричных чисел, а %p - для адресов памяти, адреса могут меняться после компиляции програмы(одни освобождаются, другие занимаются под процессы и т.д). Вы все правильно делаете.
*Чувак спасибо большое ти очень круто об*яснилл
БРО КРАСАВА*
Спасибо!)
Гена, поясни пожалуйста, почему при работе с командной строкой, и компилятором на винде , при выводе *указателя, можно указывать маркер %Х или %Х0, или %d, а убунту выдаёт ошибку с теми же маркерами, и только допускается маркер %p. Получается, на убунту всё строже, соответственно сложнее работать... Думал наоборот. Или дело в стандартах? Запутался. Спасибо.
Приветствую! Дело в версии компилятора и стандартах языка Си по-умолчанию. Просто проверьте версию компилятора на Windows и Ubuntu. И используйте флаг -std=c99 во время компиляции. Вместо c99 могут быть, c89(ansi c), c11, c18
@@ANTGPRO Спасибо. Версии компилятора сверил. Они идентичны. А с флагом -std=c99 не разобрался. На каком именно этапе или в какой последовательности его вписывать при компиляции в командную строку?
@@rickrick2909 gcc app.c -o app.exe -std=c18 -Wall -Wextra -Wpedantic, и для вывода адресов используйте %p, %x и %X - отвечают за вывод чисел в 16-ричном формате. Раньше флага %p не было, поэтому использовали %x.
@@ANTGPRO Всё понятно! Благодарю за обратную связь! Продвигаюсь к платному курсу.
Если мы создаем 500 переменных , то нужно создавать и 500 указателей для их хранения. То есть , в любом случае в 2 раза переполняем память , разве нет ?
Привествую! В этом видео переменные используются для простоты примера. Делать указатель на переменную смысла нет.
@@ANTGPRO Понял, спасибо за ответ! Как я понял , полезность указателя проявляется при работе с большими объёмами данных.
@@ТаримЗиямов Именно. Чтобы не копировать большие блоки памяти, мы можем просто сослаться на начало блока с помощью указателя.
Гена, спасибо за видео!!
Будет продолжение курсов?
Stas Zzz Будет ))
Gena ANTG ПРивет, у меня вопрос есть. Есть строка stroka[8]. В ней записаны лат буквы, наприпер 'asdasdb'. Мне нужно превратить букву 'b' в букву 'c'. Как это сделать? Мне нужно написать программу которая будет подбирать пароли. Мне удалось выяснить с помощью команды char() код той или иной буквы, но не получается заменить их. Как это сделать?
Иван Носков тебе нужно найти позицию этой буквы в массиве, и затем заменить на новую: stroka[n] = 'c', где n - позиция буквы b.
Gena ANTG Это не то немного. Мне нужно подбирать буквы.
Иван Носков Зачем тебе заменять буквы в строке при подборе? Создай новый массив и клади туда совпавшие буквы. А проход делай по алфавиту. Думай. Подсказку я тебе дал. Только если пароль будет захэширован, тебе такой метод ничего не даст. Нужно знать каким алгоритмом захэширован пароль. И начинать перебор, постоянно прогоняя измененную строку через хэш-алгоритм.
Гена. Спасибо огромное за уроки по Си. Очень хорошо всё объяснено, хоть и с излишними повторами, но зато понятно.
Однако у меня есть пара вопросов по этому видео:
В одном из предыдущих видео ты говорил, что переход на след строку под управлением Windows правильнее осуществлять "
", однако в этом видео переходишь символом '
'. Объясни пожалуйста почему так.
И правильно ли я понял, что объявление константы '
' в данном случае немного экономит ОП (Однако писать приходится больше, что в свою очередь увеличивает размер самой программы)?
+Олег Леонтьев для windows привльнее
. Но как видите, проблем в данном случае нет. А когда они возникут, вы будете знать, как написать более грамотно и это спасет ситуацию. Константа для примера, в данном случае можно было написать просто
. А так, да, вы все верно описали и правильно поняли.
+Gena ANTG Спасибо огромное за ответ. С нетерпением жду следующих уроков.
через слайды информация туго заходит))))
они нужны, но время как то надо сократить
+CbIPHuK tut Решил пока отказаться от них )
Доброго времени суток. Такой вопрос под Win работает но под Linux выдает ошибку
16.c: In function ‘main’:
16.c:33:11: warning: format ‘%X’ expects argument of type ‘unsigned int’, but argument 3 has type ‘char *’ [-Wformat=]
printf("%cOne adress: 0x%X%c", EOL, onePointer, EOL);
Добрый день! ) Используйте %p для вывода адреса.
Гена, подскажи, плиз. Выходит такая ошибка(что-то с маркером %x):
warning: format ‘%x’ expects argument of type ‘unsigned int’, but argument 3 has type ‘char *’ [-Wformat=]
printf("%c One address: 0x%x%c", EOL, onePointer, EOL);
Та же проблема.Побробовал использовать %p,адрес вывело нормально, но почему не работает %x не знаю.Почитал материалы на эту тему и там для указателей рекомендуют использовать %p.
Используйте %p.
спасибо
спасибо
Мне больше нравиться "старый" формат, сразу на коде..
А когда ждать 15?
Гена, спасибо за отличный урок!
Я так понимаю что warnings в windows просто не отрабатывает при компиляции?
Я на "Linux Mint 17 X86" получаю проcто море ворнингов когда следую пошагово за тобой :) (время на видео 1:16:00)
Пример:
/home/ruslan/Dropbox/PROGRAMMING LANGUAGES/C/Learn with Gena ANTG/ukazateli.c: In function ‘main’:
/home/ruslan/Dropbox/PROGRAMMING LANGUAGES/C/Learn with Gena ANTG/ukazateli.c:23:2: warning: format ‘%X’ expects argument of type ‘unsigned int’, but argument 2 has type ‘char *’ [-Wformat=]
printf("One address: 0x%X%c", onePointer, EOL);
^
/home/ruslan/Dropbox/PROGRAMMING LANGUAGES/C/Learn with Gena ANTG/ukazateli.c:24:2: warning: format ‘%X’ expects argument of type ‘unsigned int’, but argument 2 has type ‘char *’ [-Wformat=]
printf("Two address: 0x%X%c", twoPointer, EOL);
^
/home/ruslan/Dropbox/PROGRAMMING LANGUAGES/C/Learn with Gena ANTG/ukazateli.c:25:2: warning: format ‘%X’ expects argument of type ‘unsigned int’, but argument 2 has type ‘char *’ [-Wformat=]
printf("Three address: 0x%X%c%c", threePointer, EOL, EOL);
^
One variable: 1
Two variable: 2
Three variable: 3
One address: 0xBF8920F1
Two address: 0xBF8920F2
Three address: 0xBF8920F3
[Finished in 0.0s with exit code 27]
[shell_cmd: gcc -std=c99 "/home/ruslan/Dropbox/PROGRAMMING LANGUAGES/C/Learn with Gena ANTG/ukazateli.c" -o "/home/ruslan/Dropbox/PROGRAMMING LANGUAGES/C/Learn with Gena ANTG/ukazateli" && "/home/ruslan/Dropbox/PROGRAMMING LANGUAGES/C/Learn with Gena ANTG/ukazateli"]
[dir: /home/ruslan/Dropbox/PROGRAMMING LANGUAGES/C/Learn with Gena ANTG]
[path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games]
Т.е. моему gcc не нравится ни void main ни char ))
Ruslan Krucheniuk Да, все верно, MinGW по умолчанию не отрабатывает warnings. Это не критично сейчас. Я просто знакомлю начинающих с базой. Все будет четко, когда мы перейдем на семейство linux-систем.
Гена где платные курсы??
+Vardan Karapetyan В процессе )
Супер ваши уроки отличные и доходчивые. Простите за мой вопрос а когда вы выпустите видеоурок про массивов. К сожалению завтра экзамен по програмировании. Было бы отлично если у вас был бы.
+Muhammadjon Tursunov По массивам есть вводный урок на канале. Скоро будут новые, возможно даже завтра.
Эх жалко что не сегодня. Завтра будет поздно экзамен будет. А можете ли вы сегодня залить? Пожалуйста
Спасибо, что тут скажешь. ждем продолжения.
И на платные хочется записаться
жду про масивы и строки...
Настолько глубокое понимание синтаксиса языка и умение объяснить! Это стоит большого уважения! Скажите, а столько по времени вы учили, учите язык C. чтобы быть на таком уровне? И ещё вопрос, я изучаю язык C , я понимаю, что на это нужно много времени! Вопрос в том, как ещё уложится во времени, чтобы после изучить другие языки такие, как питон, не говоря уже про С++? На это же нужны годы и годы, чтобы полностью пропустить язык через себя! Как действовать, можете наметить хоть немного карту, кроме того, что нужно пройти ваши курсы!
Приветствую! Да, нужны годы на то, чтобы стать специалистом. Сейчас я записываю платные курсы, которые помогут освоить профессию. Все заточено под практические задачи и реальные проекты. Можете посетить сайт: antg.pro, либо же освоить бесплатные уроки на канале. Желаю удачи!
Замечательные уроки, все очень доступно и понятно! Спасибо Вам огромное! Единственная претензия - уж очень они длинные. Это очень мешает усвоению материала. Несколько коротких уроков перевариваешь лучше, чем один большой. Но все настолько разжевано, что даже этот минус становится незначительным. Продолжайте в том же духе!
Спасибо за видео
Ген, а через какую прогу ты презентацию лепил?
Powerpoint
Слайды рисовал в фотошопе, а сама презентация powerpoint
когда уже выйдут новые уроки!!!! я хочу больше знаний)
Roman Bondarenko Сегодня, Рома ))
Gena ANTG Так когда новый урок будет?))
допустим мы создали переменную и назвали ее name. где в памяти хранятся эти четыре буквы? или компилятор их сразу заменяет на адрес из цифр?
Для компьютера все это - цифры.
Вместо того, что получилось на 1:12:50, вышло почему-то:
One variable: 1
Two variable: 2
Three variable: 10
После последней строки переноса не произошло. Это на виндовс 10 домашняя, x64.
А когда добавил строки для вывода адресов, то всё наладилось при выводе.
Вопрос:
т.е. если я задаю значение переменной один раз, например
short one = 1;
short two = 2;
short three = 3;
под это выделяется память,
а потом, мне нужно поменять эти значения, например на
one = 11;
two = 22;
three = 33;
то под это выделяется новая ячейка памяти, при том, что старая хранит еще первые значения и таким образом тратятся доп ресурсы комп, я правильно понимаю? Поэтому гораздо удобней переназначать переменные через указатели? Потому что он как бы затирает предыдущие значения и вписывает туда новые?
Здравствуйте. Нет ли исходного кода к вашим урокам?
Здравствуйте! Можете посмотреть здесь: github.com/GenaANTG/C
@@ANTGPRO Благодарю.
посмотрел этот урок и у меня появился вопрос вот такова содержания.Если поинтер это переменная которая хранит в себе адрес другой переменно то кто хранит адрес поинтера и его переменной?
Адрес хранится в памяти. С помощью амперсанда ты можешь получить этот адрес, как было описано в видео. Сами адреса просто хранятся в памяти.
Здравствуйте, подскажите, пожалуйста, как выделяется память под массив указателей? Мы вводим кол-во элементов в массиве указателей( то есть количество указателей в массиве указателей) с клавиатуры. Тогда как выделяется память под массив указателей? Преподаватель сказал не использовать малок и калок и объяснить как в таком случае будет выделяться память. Заранее спасибо за ответ.
….
int n;
printf("enter n");
scanf("%d",&n);
char strings[100][100];
char* array[n];
printf("
Rows to sort:
");
for (int i = 0; i < n; i++) {
printf("%d-> ", i + 1);
scanf("%s", strings[i]);
}
for (int i = 0; i < n; i++) {
array[i]=strings[i];
}
….
Геннадий, порекомендуйте пожалуйста книги по программированию. И спасибо что делаете такие легко усваиваемые уроки!)
+Vladimir Meisak И Вам спасибо!) По книгам чуть позже сделаю видео.
Спасибо за уроки. Заметил такой момент - маркер %x у меня не сработал - терминал выдает ошибку. Нашел на stackoverflow.com ответ - использовать %p. Только в этом случае получил адреса (линукс минт 64)
Гена, а не планируешь ли ты вести новомодные сейчас стримы?)
Пишем код в прямом эфире, такая практика уже есть - в том числе и в обучающих целях)
+dractw Думал об этом, я за )) но сначала запустим сайт ))
Если делать стрим, то с донатом, моя такая позиция или по подписке. Еще обсудим на нашем сайте этот вопрос.
+Gena ANTG как приобрести платный курс?
миша верижников я над ним работаю.
Геннадий спасибо большое, за уроки просто супер! Хотела корректирующий вопрос задать по указателям, там где проходит разименование указателя oneResult = *onePointer, что здесь хранится значение или адрес в переменной oneResult?
Пожалуйста! oneResult хранить ЗНАЧЕНИЕ по адресу на который ссылается onePointer.
Очень хорошо объяснён материал , лучше уроков пока ещё нигде не встречал . Спасибо огромное ! Хотел спросить есть ли уже тесты по этому материалу , если есть , то где ? Очень хотелось бы проверить свои знания :)
Ещё раз огромное спасибо и респект за проделанную вами работу!
+Андрей Кулагин Спасибо!
Gena ANTG, привет! Как приобрести ваш продвинутый курс? Очень нравится, ваша подача! Спасибо! Как с вами связаться?
+Сергей Рычков Спасибо большое! В процессе, работаю над ним.
Автор, в этом и прошлом уроке с константами вы упустили момент, который меня заинтересовал. А именно определяя командой препроцессора константы, и объявляя указатель, который является так же обычной переменной, каким образом определяется их тип? ведь если предположить, что указатель принимает тот же тип, что и переменная char, то при объёме RAM более 255 ячеек, указатель уже не сможет корректно содержать адрес переменной. Спасибо.
Добрый вечер! позвольте спросить, у меня при выведении адреса переменных, терминал выводит ошибку следующим образом : format specifies type 'unsigned int' but the argument
has type 'char *' [-Wformat]
printf("Two address: 0x%X%c", twoPointer, EOL);
~~ ^~~~~~~~~~
%s
Может это от того, что у меня типы данных главной функции int? Вместо char пробовала использовать unsigned int, но все равно ошибка;
Может формат hexadecimal с printf на маке представляется по другому? я попробовала найти альтернативу X но что то везде пишут что будет X. Пробовала и s, но там терминал выводит только Ох и все
Добрый вечер!
Используйте %u или %p вместо %c.
@@ANTGPRO спасибо! вместо Х использовала p, и получилось вот что:
One address: 0x7ffeeba06b4b
Two address: 0x7ffeeba06b4a
Three address: 0x7ffeeba06b49
это правильно?
@@aliyabermaganbet4089 да)