Что означает 'char (* p) [5];'?

человек.

Я пытаюсь понять различия между этими тремя декларациями:

char p[5];
char *p[5];
char (*p)[5];

Я пытаюсь понять выяснить это, выполнив несколько тестов, потому что все руководства по чтению объявлений и тому подобного пока мне не помогли. Я написал эту небольшую программу, и она не работает (я пробовал другие способы использования третьего объявления, и у меня закончились варианты):

#include <stdio.h>                                                              
#include <string.h>                                                             
#include <stdlib.h>                                                             

int main(void) {                                                                
        char p1[5];                                                             
        char *p2[5];                                                            
        char (*p3)[5];                                                          

        strcpy(p1, "dead");                                                     

        p2[0] = (char *) malloc(5 * sizeof(char));                              
        strcpy(p2[0], "beef");                                                  

        p3[0] = (char *) malloc(5 * sizeof(char));                              
        strcpy(p3[0], "char");                                                  

        printf("p1 = %s\np2[0] = %s\np3[0] = %s\n", p1, p2[0], p3[0]);          

        return 0;                                                               
}

Первое и второе работают нормально, и я понял, что они делают . Что означает третье объявление и как его правильно использовать?

Спасибо!

9
задан jpmelos 24 June 2011 в 12:12
поделиться