Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/60: Рейтинг темы: голосов - 60, средняя оценка - 4.72
11 / 7 / 4
Регистрация: 29.07.2019
Сообщений: 701

Читаю книгу

14.08.2021, 19:12. Показов 14355. Ответов 222
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Когда пишу, то что читаю, запоминаю лучше.

Читаю книгу Курс программирования на языке СИ. Сергей Фомин, Вадим Подбельский
Есть такое предложение там:
Идентификаторы могут иметь любую длину, но компилятор учитывает не более 31 символа от начала идентификатора. В некоторых
компиляторах это ограничение еще более жесткое, и учитываются
только первые 8 символов любого идентификатора. В этом случае
идентификаторы NUMBER_OF_ROOM и NUMBER_OF_TEST
в программе будут неразличимы.
-----------------------------------------------
Непонятно что они имеют в виду под идентификатором? Возможно имена присваеваемые переменным?
Эти имена присваемые переменным не могут превышать 31 символ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.08.2021, 19:12
Ответы с готовыми решениями:

Читаю из файла, scanf, число с лидирующим нулем
На VS 2010 #include<stdio.h> void main() { freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); ...

Читаю книгу, нужны задания
Начал читать Троелсена. Вроде все понятно и доступно объясняет, но программирование- это прежде всего практика. Вот прочитал я главу, про...

Читаю книгу,есть то чего я не понял)
Привет,форум!) Я читаю книгу "Шилдт Г. С++ Базовый курс (3-е издание, 2010)" Свежее не нашёл,но когда я пытаюсь использовать или...

222
11 / 7 / 4
Регистрация: 29.07.2019
Сообщений: 701
19.08.2021, 22:41  [ТС]
Студворк — интернет-сервис помощи студентам
Переинициализация переменной а.
Это почти идентично получению адреса переменной b.
C
1
2
3
4
5
6
7
#include<stdio.h>
int main() {
    int b =5;
    int *a = &b;
    printf("%p\n", a);
return 0;
}
Но в этой строке *a = 5+2; мы меняем значение переменной а.
И ещё я не учёл что такая переменная &b всегда имеет тип со звёздочкой.

Добавлено через 2 минуты
Для ардуино пишут на Ардуиновском С++. И возмозжности ардуино намного меньше чем микроконтроллеров других. Я так слышал.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,314
19.08.2021, 22:45
Цитата Сообщение от koeltrad Посмотреть сообщение
Переинициализация переменной а.
Это почти идентично получению адреса переменной а.
Ничего не понятно.

Цитата Сообщение от koeltrad Посмотреть сообщение
Но в этой строке *a = 5+2; мы меняем значение переменной а.
Во-первых, я не вижу такой строчки в вашем коде. Где? Во-вторых, нет, *a = 5+2 НЕ меняет значение переменной а.

Цитата Сообщение от koeltrad Посмотреть сообщение
И ещё я не учёл что такая переменная &b всегда имеет тип со звёздочкой.
Опять ничего не понятно.
0
11 / 7 / 4
Регистрация: 29.07.2019
Сообщений: 701
19.08.2021, 22:48  [ТС]
Это ответ на пост 130 https://www.cyberforum.ru/post15672148.html

Добавлено через 1 минуту
В моём посте код другой. Я написал что код из поста 130, похож на мой код, в котором я получаю адрес переменной b
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
19.08.2021, 22:49
Цитата Сообщение от koeltrad Посмотреть сообщение
Для ардуино пишут на Ардуиновском С++.
Не обязательно.
0
11 / 7 / 4
Регистрация: 29.07.2019
Сообщений: 701
20.08.2021, 00:35  [ТС]
Отличие только в том что в 130 посте идёт переинициализация значения переменной а
*a = 5+2;

Добавлено через 3 минуты
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
И ещё я не учёл что такая переменная &b всегда имеет тип со звёздочкой.
Опять ничего не понятно.
https://youtu.be/nIY1fBkGQq4?t=168

Добавлено через 1 минуту
Ааа, когда я не учёл? Это в самом начале когда спрашивал про scanf

Добавлено через 32 минуты
Или разыменованием можно назвать) Наверное нужно)
https://youtu.be/nIY1fBkGQq4?t=517

Добавлено через 13 минут
Скорее всего я не прав, там ещё запутанней система. Разбираюсь ещё

Добавлено через 46 минут
После присвоения переменной числа 20 (Разыменовывание), в переменной а(без звёздочки) продолжает существовать адрес переменной b. Что за раздвоение переменной a?
C
1
2
3
4
5
6
7
8
#include<stdio.h>
int main() {
    int b;
    int *a = &b;
    *a=20;
    printf("%p\n%d\n", a, *a);
return 0;
}
0
фрилансер
 Аватар для Алексей1153
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,319
20.08.2021, 06:11
koeltrad, a - это переменная с типом int* (указатель на тип int). Или ещё называют просто "указатель". В этот указатель записан адрес переменной b

при разыменовании указателя можно получить доступ к указуемому (то есть переменной b), при этом сам указатель a не меняется
2
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
20.08.2021, 07:27
Цитата Сообщение от koeltrad Посмотреть сообщение
После присвоения переменной *а числа 20 (Разыменовывание), в переменной а(без звёздочки) продолжает существовать адрес переменной b. Что за раздвоение переменной a?
Никакого раздвоения нет, попытаюсь объяснить понятно:
int *a = &b; сперва объявляется указатель *a и ему присваивается адрес ячейки памяти переменной b
*a=20; в эту же в ячейку памяти присваивается(записывается) значение 20
printf("%p\n%d\n", a, *a); выводится адрес ячейки памяти по указателю *a и значение(содержимое) этой ячейки памяти
1
 Аватар для qppq
145 / 89 / 23
Регистрация: 31.08.2016
Сообщений: 780
Записей в блоге: 2
20.08.2021, 08:02
Цитата Сообщение от мама Стифлера Посмотреть сообщение
*a=20; в эту же в ячейку памяти присваивается(записывается) значение 20
разыменование указателя ( по книжному ),
а присвоение значения происходит в ячейку переменной b ?! ятд
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
20.08.2021, 08:11
Цитата Сообщение от qppq Посмотреть сообщение
разыменование указателя ( по книжному )
Ну так я же написал, что постараюсь объяснить понятным языком, не по книжным, или научным терминам.
0
 Аватар для qppq
145 / 89 / 23
Регистрация: 31.08.2016
Сообщений: 780
Записей в блоге: 2
20.08.2021, 08:14
Цитата Сообщение от мама Стифлера Посмотреть сообщение
Ну так я же написал
все верно, млдц, я тож когда смотрю вижу фигу
0
 Аватар для COKPOWEHEU
4147 / 2725 / 433
Регистрация: 09.09.2017
Сообщений: 12,071
20.08.2021, 10:50
Цитата Сообщение от ValeryS Посмотреть сообщение
ассемблер это язык программирования, архитектура компьютера, алгебра логики это несколько другие дисциплины
Ну да. В ассемблере физически нет переменных, в том числе указателей. Их приходится реализовывать вручную. Иногда там нет даже стека. Но даже когда есть, им все равно приходится пользоваться постоянно, автоматическую передачу параметров в функции он не сделает.
Цитата Сообщение от ValeryS Посмотреть сообщение
например учит ли ассемблер правилам Моргана? а без них в программировании беда
Где именно "без них беда"? В программировании контроллеров они не используются, в графике не используются, в системном программировании не используются. Точнее, могут использоваться в каких-то отдельных случаях, но крайне редко.
Цитата Сообщение от koeltrad Посмотреть сообщение
И возмозжности ардуино намного меньше чем микроконтроллеров других. Я так слышал.
Вы хотя бы потолка Ардуины достигните сначала. А то еще начнете городить мигалку на трех F7.
Цитата Сообщение от koeltrad Посмотреть сообщение
https://youtu.be
Забудьте про ютуб! Что за манера делать вид что учишься, просматривая мультики
0
11 / 7 / 4
Регистрация: 29.07.2019
Сообщений: 701
20.08.2021, 17:45  [ТС]
Это конечно пингпонг данными. Я для себя понятную модель придумал. Но боюсь писать здесь)))
Не по научному ,но понятно. Нужно ещё мне потренироваться конечно.
Так уж и быть:
int *a = &b; Здесь адрес в переменную а(без звёздочки) сохраняется навсегда.
А вот переменной *a можно манипулировать, переприсваивать значения.
Например: *a=20;
Потом когда выполняется этот код: int *a = &b; 20 не может ведь записаться в адрес переменной &b, логично. Поэтому 20 присваивается просто переменной b.
*a как бы говорит- я могу сохранить значение в переменную b, потому что имею её адрес.

Я мог бы описать более по научному, но менее понятно))

Добавлено через 12 минут
Интересно то, что до присвоения переменной *a числа 20, в переменной *a ничего не находится.
Можно сделать вывод что переменная *a ждёт пока ей что либо присвоят. А у меня адрес переменной b, у меня адрес переменной b. Я теперь ей значение присвоить могу))

C
1
2
3
4
5
6
7
#include<stdio.h>
int main() {
    int b;
    int *a = &b;
    printf("%p\n%d\n", a, *a);
return 0;
}
По колхозному объяснил, ну как мог)
Информация связанная с историей запоминается лучше. Доказано)

Добавлено через 2 минуты
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Забудьте про ютуб! Что за манера делать вид что учишься, просматривая мультики
Можно воспринимать то что я делаю как подготовка к обучению.
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
20.08.2021, 18:04
В целом правильно размышляете. Только вот тут возможно недопоняли, или я тогда не верно понял прочитанное:
Цитата Сообщение от koeltrad Посмотреть сообщение
Интересно то что до присвоения переменной *a числа 20 в переменной *a ничего не находится.
В указателе а хранится адрес переменной b, а вы говорите ничего не хранится. В указателях могут хранятся только адреса и ничего другое.
Короче вот два кода, которые выдают один результат. Если вы понимаете почему так, значит отлично.
Кликните здесь для просмотра всего текста
C
1
2
3
4
int b;
int *a = &b;
b = 20;
printf("%p\n%d\n", (void*)a, *a);
C
1
2
3
4
int b;
int *a = &b;
*a = 20;
printf("%p\n%d\n", (void*)a, *a);
0
11 / 7 / 4
Регистрация: 29.07.2019
Сообщений: 701
20.08.2021, 18:15  [ТС]
Код в посте 152 немного другой. Без присвоения переменной *а =20;
Посмотрите на результат кода. В переменной *а находится 0
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
20.08.2021, 18:25
koeltrad, я специально добавил строку *а =20, b = 20, чтоб было понятней, с нулем не понятно будет.
В общем *а =20, аналогично b = 20. Идет присваивание переменной b значения 20. Только в первом случае присваивание делается через указатель а, а во втором случае делается присваивается напрямую, в переменную b.
1
фрилансер
 Аватар для Алексей1153
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,319
20.08.2021, 18:53
Цитата Сообщение от koeltrad Посмотреть сообщение
int *a = &b; Здесь адрес в переменную а(без звёздочки) сохраняется навсегда.
a - это указатель (на тип int). (Или: переменная, хранящая адрес объекта типа int)
int* - это такой тип (неотделимо от звёздочки!) : указатель на int
поэтому, чтобы не путать себя же, лучше не ставить пробел между указуемым типом и звёздочкой:
int* a;

Цитата Сообщение от koeltrad Посмотреть сообщение
*a как бы говорит
звёздочка перед указателем - это оператор разыменования. Результат этого выражения - ссылка на указуемое этим указателем. (В Си нет ссылок, но это работает, по сути, именно как ссылка)

Цитата Сообщение от koeltrad Посмотреть сообщение
&b
амперсенд перед любой переменной - это взятие адреса этой переменной. Результат такого выражения - адрес
1
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
20.08.2021, 18:56
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Где именно "без них беда"? В программировании контроллеров они не используются, в графике не используются, в системном программировании не используются.
т.е классическое a&b=!((!a) | (!b)) нигде не используется ?
а b=!!b?


koeltrad, пойми что такое указатель, без этого понятия будешь так все время и путается

вот есть объект Вася мы ему дали лично 20 руб это
Цитата Сообщение от мама Стифлера Посмотреть сообщение
b = 20;
теперь нам нужно переслать ему деньги по почте
сначала узнаем где живет Вася, Третья улица строителей 25 кв 12
это
Цитата Сообщение от мама Стифлера Посмотреть сообщение
int *a = &b;
в такой записи int *a.... * означает что a это указатель
и посылаем ему деньги 20 руб
Цитата Сообщение от мама Стифлера Посмотреть сообщение
*a = 20;
а вот в такой записи *a =... * означает разыменовании отдать тому кто там живет
т.е a имеет значение Третья улица строителей 25 кв 12
*a это кто там живет, в нашем случае Вася

Цитата Сообщение от koeltrad Посмотреть сообщение
int *a = &b; Здесь адрес в переменную а(без звёздочки) сохраняется навсегда.
нет не навсегда
вот такой пример
C
1
2
3
4
5
6
7
8
9
int b=20;
int c=30;
int d=40;
int * a= &b;
printf("%p\n%d\n", a, *a);
a=&c;
printf("%p\n%d\n", a, *a);
a=&d;
printf("%p\n%d\n", a, *a);
что выведется на экран?
2
 Аватар для COKPOWEHEU
4147 / 2725 / 433
Регистрация: 09.09.2017
Сообщений: 12,071
20.08.2021, 19:26
Цитата Сообщение от ValeryS Посмотреть сообщение
т.е классическое a&b=!((!a) | (!b)) нигде не используется ?
Я не встречал. Гораздо чаще используются всякие сдвиги и наложение масок. То, что вы говорите, скорее применяется в схемотехнике на микросхемах низкой интеграции или возможно (но сомневаюсь) в ПЛИСах.
!!b это скорее Си-шный костыль чтобы преобразовать из целочисленного в логический тип. Не булевская операция, а именно приведение типа.
Цитата Сообщение от Алексей1153 Посмотреть сообщение
поэтому, чтобы не путать себя же, лучше не ставить пробел между указуемым типом и звёздочкой:
int* a;
Только когда понимание появится, лучше обратно "приклеить" звездочку к имени переменной во избежание путаницы при объявлении
C
1
int* a, b; //какой тип у переменных?
Цитата Сообщение от koeltrad Посмотреть сообщение
int *a = &b; Здесь адрес в переменную а(без звёздочки) сохраняется навсегда.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main(){
  int a = 1;
  int b = 2;
  int c = 3;
  int *ptr = &b;
  int d = 4;
  printf("a:\t[%p]=%i\n", &a, a);
  printf("b:\t[%p]=%i\n", &b, b);
  printf("c:\t[%p]=%i\n", &c, c);
  printf("d:\t[%p]=%i\n", &d, d);
  printf("ptr:\t[%p]->[%p]=%i\n", &ptr, ptr, *ptr);
  ptr = &d;
  printf("ptr:\t[%p]->[%p]=%i\n", &ptr, ptr, *ptr);
}
Запустите этот код и помедитируйте над адресами. И над тем, что для переменной ptr можно получить ТРИ числа: адрес самой переменной, адрес куда она указывает и значение куда она указывает.
2
фрилансер
 Аватар для Алексей1153
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,319
20.08.2021, 19:43
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
лучше обратно "приклеить" звездочку к имени переменной во избежание путаницы при объявлении
не надо ничего приклеивать обратно, звёздочка - это часть типа

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
int* a, b;
а так делать не следует, это и называется "себя же путать"

вот так же всё понятно и красиво:

C
1
2
int* a=0;
int b=0;
Добавлено через 1 минуту
koeltrad, короче, как видишь, школы прилепливания звёздочки разные, но нужно помнить, что это часть типа
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
20.08.2021, 19:55
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
!!b это скорее Си-шный костыль чтобы преобразовать из целочисленного в логический тип.
здрасте
конструкция типа
C
1
2
3
if(a=0)
 a=1;
b=5;
сплошь и рядом превращается в ассемблерный листинг с обратным оператором, не jz а jnz

Assembler
1
2
3
4
5
  cmp eax, 0
  jnz m1
  mov eax,1
m1:
 mov ebx,5
(ассемблер не настоящий похож на х86 и ладно )
что это если не отрицание отрицания

почитай книгу Криса Касперски "Техника отладки программ без исходных кодов"
узнаешь много интересного про ассемблер и алгебру логики
Но вроде мы от темы отвлеклись
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.08.2021, 19:55

Читаю книгу все работал а щас выдает такую ошибку
Вот смотрите не понимаю в чем дело!? &lt;html&gt; &lt;head&gt; &lt;title&gt;Опрос&lt;/title&gt; &lt;head&gt; &lt;body&gt; &lt;h1&gt;Предварительный...

Читаю книгу Страуструпа для новичков но мне одному она кажется трудной и не совсем понятной?
на протяжении всей книги он показывает код в виде ...&lt;...&gt;... почему просто бы не объяснить?в ООП Р.Лафоре и Б.Эккеля все норм по...

Читаю книгу Криса Касперски "Искусство дизассемблирования"
Читаю книгу Криса Касперски &quot;Искусство дизассемблирования&quot;, в которой автор рассказывает, каким образом можно производить модификацию...

читаю читаю не найду
расскажите какие функции в boost::asio отвечают за то если подключился кто то то они значения возращают дайте линк а то по туториалу на...

Читаю из файла в vector
Всем доброго времени суток, пытаюсь считать файл в вектор... Но трабл, в вектор всегда пишется ноль, не могу понять где косяк... В коде...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
160
Закрытая тема Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru