Значение этих синтаксисов (арифметика указателей?) - PullRequest
2 голосов
/ 02 ноября 2011

Мне было интересно, что означают эти 4 символа. Я новичок в указателях в C, и я не уверен, считается ли это арифметика указателей?

1. (*x)++ 
2. *(x++) 
3. ++(*x)
4. *(++x)

Спасибо

Ответы [ 4 ]

6 голосов
/ 02 ноября 2011
  1. (*x)++ - Увеличить значение, указанное на x (постинкремент, возвращает исходное значение)

  2. *(x++) - Увеличение x (постинкремент) разыменовать исходный указатель).

  3. ++(*x) - аналогично # 1, но возвращает увеличенное значение.

  4. *(++x) - То же, что и # 2, но разыменование результирующего указателя.

Кроме того, # 2 и # 4 изменяют значение указателя (арифметика указателя), а # 1 и # 3 -измените значение, указанное на x (т. е. арифметику what-x-points-at).

5 голосов
/ 02 ноября 2011
1. (*x)++ 

Значение, на которое указывает x, постинкрементно увеличивается.Это приведет к указанному значению до операции приращения.

2. *(x++) 

Указатель x разыменовывается и постинкрементно увеличивается.Это возвращает значение, на которое указывает x до операции приращения.

3. ++(*x)

Значение, на которое указывает x, предварительно увеличивается.Это приведет к указанному значению после операции приращения.

4. *(++x)

Указатель x разыменовывается после предварительного увеличения.Это даст значение местоположения сразу после того, на которое в данный момент указывает x.

Поскольку 2 и 4 изменяют значение самого x, они считаются примерами арифметики указателей.1 и 3 изменяют объект, на который указывает x, но не сам указатель;поэтому они не считаются арифметикой указателей.

1 голос
/ 02 ноября 2011
  1. (*x)++ Увеличивает значение, на которое указывает x, и возвращает его старое значение.
  2. *(x++) Изменяет x, чтобы указывать на следующий адрес памяти (Точно, где это определяется размером того, на что x объявляется указывающий) и возвращает значение, хранящееся в старом адрес.
  3. ++(*x) Увеличивает значение, на которое указывает x, и возвращает его новое значение.
  4. *(++x) Перемещает x к следующему адресу (см. 2) и возвращает значение, сохраненное по адресу new .
0 голосов
/ 02 ноября 2011

Все, что включает в себя увеличение или уменьшение значения указателя (в отличие от значения того, на что он указывает), считается арифметикой указателя. Следовательно, 2 и 4 являются примерами арифметики указателей, а 1 и 3 - нет.

Например, (*x)++ означает сначала найти значение, на которое указывает x, а затем увеличить это значение на 1, тогда как *(x++) означает увеличить x само по себе (то есть, заставить его указывать на элемент непосредственно справа от того, на что оно первоначально указывало), а затем найдите значение элемента, на который x первоначально указывал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...