Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2016, 14:27   #1
apostata
Новичок
Джуниор
 
Регистрация: 20.12.2016
Сообщений: 2
По умолчанию Подскажите по printf, что и как делает эта функция

почему
Код:
#include "stdio.h"
main()
{
	unsigned short a;
	a=32767;
	printf("%d \n", a);	
	printf("%d \n", a++);
	printf("%d \n", a++);	
	printf("%d \n", a++);	
	return 0;
	
 }
даёт результат,
Цитата:
32767
32767
32768
32769
а
Код:
#include "stdio.h"
main()
{
	unsigned short a;
	a=32767;
	printf("%d \n", a);	
	a++;
	printf("%d \n", a);
	a++;	
	printf("%d \n", a);	
	a++;
	printf("%d \n", a);	
	return 0;
	
 }
выдаёт
Цитата:
32767
32768
32769
32770
то что сперва выводится переменная, а потом происходит вычисление
это документировано, или я чего то не понимаю?
apostata вне форума Ответить с цитированием
Старый 21.12.2016, 14:37   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

а++ сначала берет переменную, потом вычисляет, поэтому когда все это в аргументе функции будет передано старое значение.
Кроме все прочего оба примера не равнозначны в принципе, поэтому результаты разные.
У вас на одно а++ меньше в первом случае.
waleri вне форума Ответить с цитированием
Старый 21.12.2016, 15:46   #3
apostata
Новичок
Джуниор
 
Регистрация: 20.12.2016
Сообщений: 2
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
а++ сначала берет переменную, потом вычисляет, поэтому когда все это в аргументе функции будет передано старое значение.
Кроме все прочего оба примера не равнозначны в принципе, поэтому результаты разные.
У вас на одно а++ меньше в первом случае.
насчёт не равнозначности не совсем понял в обоих примерах a++ одинаковое количество 3 шт.

я правильно понимаю, что если бы я написал
Код:
printf("%d \n", a+100);
то си понял бы это как
Код:
a=a+100;
printf("%d \n", a);
а мой вариант
Цитата:
printf("%d \n", a++)
был понят си как
Код:
printf("%d \n", a);
a=a+100;
apostata вне форума Ответить с цитированием
Старый 21.12.2016, 15:57   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
то си понял бы это как
Нет. Он понял как
Код:
t = a + 100;
printf("%d \n", t);
p51x вне форума Ответить с цитированием
Старый 21.12.2016, 16:05   #5
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

http://cppstudio.com/post/282/
Croessmah вне форума Ответить с цитированием
Старый 21.12.2016, 16:22   #6
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,529
По умолчанию

1 пост)
Всё правильно он делает. Сначала отдаёт функции "a", а потом делает инкремент "a++".
Во втором примере ты сначала выводишь один раз "a", а потом делаешь инкремент "a++".
В первом варианте ты два раза подряд выводишь одно и то же значение, а потом делаешь инкремент.

2 пост)
Если ты делаешь "printf("%d \n", a+100);", то выводишь значение "a + 100", но при этом НЕ ИЗМЕНЯЕШЬ значение "a". Оно остаётся прежним.

"a=a+100;
printf("%d \n", a);"
Нет. Он бы так не понял. Ты же в первом примере не меняешь значение переменной. Такого присваивания там нету. Но всё равно добавляешь 100, и сумму выводишь на экран. Хотя значение переменной остаётся тем же.

Твой вариант
printf("%d \n", a++)
компьютер понял бы как
printf("%d \n", a);
a++;
Просто это типичная Си-шная запись выражений, чтоб вместо двух строчек писать одну.
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/
В ожидании Кеши...
jura_k вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что делает эта функция nactyx Помощь студентам 3 05.06.2015 08:51
Обьясните пожалуста как и что делает эта программа и почему она это делает. Dimka-novitsek Общие вопросы C/C++ 7 16.10.2013 12:02
Что делает эта строчка??? marselik Общие вопросы C/C++ 2 02.11.2009 13:54
Что делает эта прога StudentPolitech Общие вопросы C/C++ 1 25.03.2009 22:54
FindEgual-что делает эта функция? stasig Паскаль, Turbo Pascal, PascalABC.NET 1 14.12.2008 23:02