Я пытаюсь понять, почему код, следующий C++ не компилируетприращение указателя на массив
int main() {
int a[10];
int (*p)[10] = &a;
int *q = static_cast<int *>(++p);
}
Если это не очевидно, что я пытаюсь сделать, это найти указатель на конец массива используя арифметику указателя.
Мое понимание до сих пор заключается в том, что p
имеет указатель на массив из десяти целых чисел, а также выражение ++p
. Обычно я могу назначить массив ints переменной типа указателя на int, но это не сработало указателем ++p
.
Я сначала пробовал без static_cast
, но это тоже не сработало.
Вы можете сделать ' p' an 'int *': 'int * p = a; int * q = ++ p; ' –
@GregKikola Да, я мог бы это сделать, но это не то, что я хочу сделать. Я думаю, что арифметика указателя должна быть разной в двух случаях. –
О, я неверно истолковал, я не видел заметки о желании 'q' указывать на конец массива. В этом случае вы можете сделать 'int * q = a + 10;'. Альтернативно, с C++ 11, 'int * q = std :: end (a);' (просто включите ''). –