2015-04-03 6 views
0

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

char* chrArray; 
int* intArray; 

После того, что я нашел charArray++ и intArray++ используются в коде, чтобы указать следующий элемент charArray и intArray. Но до сих пор знаю char в C 1 байт и int в массиве 4 байт. Поэтому я не могу понять, как ведет себя оператор приращения. Может кто-нибудь объяснить это.

+0

См. [Арифметика указателей] (http://stackoverflow.com/questions/394767/pointer-arithmetic) –

+1

Нет языка, который дает вам больше контроля над памятью, чем C (кроме сборки ...). С этим большим контролем возникает большая ответственность за то, что хранится в памяти в любом месте и как обрабатывать значение. Указатели - это просто переменные, но вместо того, чтобы удерживать то, что вы считаете нормальным значением, указатели удерживают адрес памяти, где хранится значение. Когда вы объявляете указатели, как вы делали выше, они ничего не удерживают, пока вы не назначите им адрес. Обычным примером является «int n = 5; int * p = & n; 'Здесь' p' содержит адрес 'n', где хранится значение' 5'. –

ответ

4

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

+0

Это означает, что оператор char increment задает указатель для указания следующего байта в памяти? А для integer он устанавливает после 4 байтов? – sharif1981

+0

Вообще-то да. Однако важно понимать, что семантика оператора ++ для указателей - это увеличение адреса по размеру указанного пункта. Это выполняется компилятором во время компиляции программы. –

+0

Большое спасибо. Теперь это имеет смысл. – sharif1981

3

В соответствии стандартного документа C11, глава 6.5.2.5, Постфикс инкремента и декремента

Результат постфикса ++ оператором является значение операнда. В качестве побочного эффекта значение объекта операнда увеличивается (то есть значение 1 соответствующего типа равно ).

Таким образом, всякий раз, когда вы используете оператор инкремента постфикса, вы не добавление какого-либо конкретного значения, скорее, вы addding значение 1 типа операнда, на котором оператор является используемый.


Теперь для примера,

  • chrArray имеет тип char *. Итак, если мы сделаем chrArray++, в результате будет добавлено значение char [sizeof(char), которое равно 1].

  • OTOH, intArray имеет тип int *. Итак, если мы сделаем intArray++, в результате будет добавлено значение int [sizeof(int), которое равно 4 на 32-битной платформе, может меняться] будет добавлено к intArray.

В основном, прирост оператора Postfix на переменнуюуказатель любых точек типа к следующему элементу (при условии, действительный доступ) этого типа.

Смежные вопросы