Постинкремент и Предварительное увеличение в C

У меня есть вопрос об этих двух заявлениях C:

x = y++;

t = *ptr++;

С оператором 1 начальное значение y копируется в x, а затем y увеличивается.

С помощью утверждения 2 мы смотрим на значение, на которое указывает * ptr, помещая его в переменную t, а затем через некоторое время увеличиваем ptr.

Для оператора 1 оператор приращения суффикса имеет более высокий приоритет, чем оператор присваивания. Таким образом, не следует ли сначала увеличивать y, а затем присваивать x увеличенное значение y?

Я не понимаю приоритета оператора в этих ситуациях.

 Jeff Mercado26 мая 2012 г., 08:47
Вы, вероятно, захотите прочитать оsequence points тогда, если это вас смущает.

Ответы на вопрос(4)

int rm=10,vivek=10;
printf("the preincrement value rm++=%d\n",++rmv);//the value is 11
printf("the postincrement value vivek++=%d",vivek++);//the value is 10

ниже, чем оператор присваивания. Итак, когда мы делаемp=a++; первое значениеa назначен наp иa увеличивается, следовательно.

Difference between pre-increment and post-increment in C:

Унарные операторы, Унарный означает: «Функция с ОДНИМ входом». & Quot; Оператор & Quot; означает: «изменение сделано для переменной».

Встроенные унарные операторы инкремента (++) и декремента (-) изменяют переменную, к которой они присоединены. Если вы попытались использовать эти унарные операторы против константы или литерала, вы получите ошибку.

В C, вот список всех встроенных унарных операторов:

Increment:         ++x, x++
Decrement:         −−x, x−−
Address:           &x
Indirection:       *x
Positive:          +x
Negative:          −x
Ones_complement:  ~x
Logical_negation:  !x
Sizeof:            sizeof x, sizeof(type-name)
Cast:              (type-name) cast-expression

Эти встроенные операторы являются скрытыми функциями, которые берут входные данные переменной и помещают результат вычисления обратно в ту же переменную.

Example of post-increment:

int x = 0;     //variable x receives the value 0.
int y = 5;     //variable y receives the value 5

x = y++;       //variable x receives the value of y which is 5, then y 
               //is incremented to 6.

//Now x has the value 5 and y has the value 6.
//the ++ to the right of the variable means do the increment after the statement

Example of pre-increment:

int x = 0;     //variable x receives the value 0.
int y = 5;     //variable y receives the value 5

x = ++y;       //variable y is incremented to 6, then variable x receives 
               //the value of y which is 6.

//Now x has the value 6 and y has the value 6.
//the ++ to the left of the variable means do the increment before the statement

Example of post-decrement:

int x = 0;     //variable x receives the value 0.
int y = 5;     //variable y receives the value 5

x = y--;       //variable x receives the value of y which is 5, then y 
               //is decremented to 4.

//Now x has the value 5 and y has the value 4.
//the -- to the right of the variable means do the decrement after the statement

Example of pre-decrement:

int x = 0;     //variable x receives the value 0.
int y = 5;     //variable y receives the value 5

x = --y;       //variable y is decremented to 4, then variable x receives 
               //the value of y which is 4.

//x has the value 4 and y has the value 4.
//the -- to the right of the variable means do the decrement before the statement

2], Постинкремент всегда возвращает значение до увеличения, а затем иногда увеличивает значение.

Следовательно,t = *ptr++ по существу эквивалентно:

t = *ptr;
ptr = ptr + 1;

То же самое относится и к вашему1] - значение, полученное отy++ это значениеy до приращения. Приоритет не меняет этого - независимо от того, насколько выше или ниже приоритет других операторов в выражении, значение, которое он выдает, всегда будет значением, предшествующим приращению, а приращение будет выполнено некоторое время спустя.

 Pkp26 мая 2012 г., 09:09
Ой. теперь я вижу это. Спасибо
 Pkp26 мая 2012 г., 08:49
Чк это из. Как я уже сказал, указатель увеличивается первым.c-faq.com/aryptr/ptrary2.html
 26 мая 2012 г., 08:51
Проверьте это: & quot; Результатом оператора postfix ++ является значение операнда. После того, как результат получен, значение операнда увеличивается. & Quot; (из & # xA7; 6.5.2.4/2 стандарта C99).
 26 мая 2012 г., 08:58
@Pkp: я думаю, что вы неправильно интерпретируете FAQ. Вопрос, который здесь решается, заключается в том,++ будет применяться к самому указателю, или к тому, к чему относится указатель (что, кстати, также определяет приоритет в этом случае). Ответ заключается в том, что это относится к самому указателю, а не к указателю.
 Pkp26 мая 2012 г., 08:53
ты прав. Я думал, что могу доверять c-faq, следуя стандарту, это лучшая политика. Извиняюсь.

Ваш ответ на вопрос