2016-04-26 4 views
0
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]’ 


} 
+3

'int * p2 [2];' представляет собой массив из двух указателей на 'int'. Используйте [cdecl.org] (http://cdecl.ridiculousfish.com/?q=int*+p2%5B2%5D), когда вы не знаете, что такое объявление, подобное этому. –

+0

Конечно. Только один из тех дней ... – roro

+1

Если вы хотите указатель на массив, это будет 'int (* p2) [2];'. Обратите внимание, что в этом случае размер массива значителен - если (например) вы увеличиваете 'p2', он будет увеличиваться на размер массива из 2' int '. –

ответ

4

Массив из 2-х элементов, каждый элемент является указателем на int.

cdecl.org является вашим другом для решения этих задач:

enter image description here

+1

Paul R указал на это в комментарии. Очень очевидно в правильном мышлении. – roro

+0

Я помню большую утилиту HELPPC для DOS (у которой был резидентный режим для вызова программы в любое время), и у нее были примеры сложных объявлений переменных C. Было хорошее обучение в то время: D –

+0

Кажется, что есть онлайн-версия базы данных HELPPC. Это была тема: http://stanislavs.org/helppc/c_declarations.html –

0

p2 является массив указателей на int, размер которого равен 2. Вы можете хранить p1 в p2 с:

p2[i] = p1; 

Если вы хотите, чтобы указатель был Массив вы бы:

int (*ptr)[2]; 

Вы можете прочитать на spiral rule, легкий способ понять более изощренные декларации.

0

Удобный способ расшифровать сложные выглядящие заявления, чтобы прочитать справа налево:

int* p2[2]; 

Если вы read from right to left, вы получите: массив с двумя элементами, которые являются указателями на int.

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