Может кто-нибудь объяснить правила объявления смеси массива и указателя?об объявлении смеси массива и указателя
Ниже приведено то, что я нашел. Однако, я не понимаю, почему int *p[10]
означает an allocation of 10 consecutive memory blocks (each can store data of type int *)
, а int (*p)[10]
означает declaring a pointer to an array of 10 consecutive memory blocks (each can store data of type int)
. Каковы правила этих кодов?
int p[10]; //10 consecutive memory blocks (each can store data of type int) are allocated and named as p
int *p[10]; //10 consecutive memory blocks (each can store data of type int *) are allocated and named as p
int (*p)[10]; //p is a pointer to an array of 10 consecutive memory blocks (each can store data of type int)
В настоящее время, я думаю, для правил:
xxx[10]
будет интерпретироваться как please allocating 10 memory blocks in which each blocks may store xxx
. Следовательно, int *p[10]
будет приведено в 10 memory blocks in which each can store data of type int *
;
(*p)
будет истолкован первым из-за ()
, и это приведет к указателю, указывающему куда-то. Следовательно, int (*p)[10]
будет приведено в a pointer to an array of 10 consecutive memory blocks (each can store data of type int)
.
Извините за мой плохой английский. Надеюсь, вы поймете, что я имею в виду. Любая помощь приветствуется! Большое спасибо!
спасибо! Это очень четкий и прекрасный ответ! :) –
Привет. Извините. Я попытался написать 'int * a, a2;' и проверить их размер. Однако я обнаружил, что размер a отличается от a2. Согласно понятию, что '*' принадлежит 'int', не должны ли оба из них иметь одинаковый размер? Спасибо за ваше время! :) –
@ 我 永遠 最 愛伊茲娜 На самом деле я не знаю правильных терминов, чтобы лучше объяснить ... Отредактировал вопрос, пытаясь прояснить – user463035818