что означает это обозначение в C ++ - PullRequest
0 голосов
/ 02 мая 2011

так что у меня есть:

char inBuf[80]

и есть еще одна строка

inBuf+9

что это значит, когда я добавляю это +9 к имени массива?

Ответы [ 8 ]

5 голосов
/ 02 мая 2011

То же, что ссылка на элемент номер 9 (на основе 0).

Эквивалентная запись будет:

&inBuf[9]

Если вы хотите получить значение, вы можете использовать *(inBuf+9)

2 голосов
/ 02 мая 2011

Это будет указывать на 10-й элемент массива.Так, например:

*(inBuf + 9) = 10

назначит 10 10-му элементу

1 голос
/ 02 мая 2011

Ответ уже дан. Я могу только повторить это.

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

Добавление в арифметике указателей является особенным в том смысле, что оно заботится о типе данных элементов массива, поэтому, когда вы говорите

char inBuf[80]
inBuf + 9

он продвигает 9 областей памяти, достаточных для хранения 9 символов (обычно 9 * 1 байт)

int inBuf[80]
inBuf + 9

это добавит 9 ячеек памяти, достаточных для хранения 9 целых чисел (обычно 9 * 4 байта).

Массив и указатели не всегда одинаковы, для этого обратитесь к «программированию на экспертном С»
Также никогда не используйте арифметическую полиморфизацию указателей, для этого обратитесь к «Скотту Мейерсу»

0 голосов
/ 02 мая 2011

Когда вы выполняете сложение с ним, идентификатор массива, такой как ваш inBuf, распадается на указатель на первый элемент в массиве, а добавленное число умножается на размер элемента массива (в этом случае char, который имеет размер 1) для создания нового адреса.

Итак, inBuf + 9 - это адрес 10-го элемента в массиве, который также может быть выражен как &inBuf[9]. Вы можете использовать его как в:

*(inBuf + 9) = '\0';   // overwrite the 10th element in inBuf with a NUL
const char* p = strchr(inBuf + 9, ' ');  // find space at or beyond 10th char
0 голосов
/ 02 мая 2011

inBuf ссылаются на базовый адрес.но inBuf + 9 находит 10-й элемент по базовому адресу.

   *(inBuf + 9) = 34;

Это присвоит значение 34 10-му элементу в массиве inBuf. * ​​1004 *

0 голосов
/ 02 мая 2011

inBuf + 9 означает увеличение адреса inBuf на 9.

0 голосов
/ 02 мая 2011

Использование inBuf без спецификатора для индекса массива будет таким же, как при просмотре char * inBuf. inBuf + 9 будет таким же, как inBuf [9].

0 голосов
/ 02 мая 2011

inBuf это как написать & inBuf [0].Таким образом, inBuf +9 означает адрес inBuf, добавленный с длиной 9 символов (& inBuf [9]).

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