int* p1;
Это просто указатель. При использовании с новым [] он может увеличиваться как массив или итератор. Это прекрасно, но чтоКакая переменная int * [2]? как в delcaration int * p2 [2]
int* p2[2];
Похоже, он должен быть указателем на массив с двумя элементами, не так ли? Но если я создаю массив из двух элементов, я не могу указать на него. Я все равно не могу заставить p2 что-то сказать. Многие из них просто пытаются выполнить разные задания, но p2 = & arr не работает, что меня действительно удивило. Итак, что такое int * [2] и как оно отличается от int (*) [2]?
int main()
{
int arr[2];
int* p1; //pointer to int, can be used like an array
int* p2[2]; //pointer to an array
p1 = new int[2];
p1 = arr;
//p1 = &arr; //cannot convert ‘int (*)[2]’ to ‘int*’ in assignment
//p2 = &arr; //incompatible types in assignment of ‘int (*)[2]’ to ‘int* [2]’
//p2 = &p1; //incompatible types in assignment of ‘int**’ to ‘int* [2]’
//p2 = new int[2]; //incompatible types in assignment of ‘int*’ to ‘int* [2]’
//p2 = arr; //incompatible types in assignment of ‘int [2]’ to ‘int* [2]’
}
'int * p2 [2];' представляет собой массив из двух указателей на 'int'. Используйте [cdecl.org] (http://cdecl.ridiculousfish.com/?q=int*+p2%5B2%5D), когда вы не знаете, что такое объявление, подобное этому. –
Конечно. Только один из тех дней ... – roro
Если вы хотите указатель на массив, это будет 'int (* p2) [2];'. Обратите внимание, что в этом случае размер массива значителен - если (например) вы увеличиваете 'p2', он будет увеличиваться на размер массива из 2' int '. –