2014-07-14 1 views
0

je cdecl et obtenir sa définition comme « déclarer papi sous forme de tableau 10 de pointeur vers pointeur vers int » Alors j'écris mon code de cette manièreQuel est le sens de int * (* Papi [10])

int i = 10; 
int *api[10]; 
api[0] = &i; 
int *(*papi[10]); 
papi = &api; 

Et je suis une erreur dit "type de tableau 'int ( [10])' est pas cessibles"

Quelle est la bonne façon d'utiliser le PAPI?

+0

Enfin tout à fait clair à ce sujet, merci pour tous vos hel p! – Floyd

Répondre

1

J'interpretated phrase "déclare papi sous forme de tableau 10 de pointeur vers pointeur vers int" comme déclarer un tableau de 10 pointeurs de pointeur vers int. :)

Effectuez les opérations suivantes

#include < stdio.h> 


int main(void) 
{ 
    int i = 10; 
    int *api[10] = { &i }; 
    int **papi[10]; 
    papi[0] = api; 

    printf("%d\n", ***papi); 
} 

La sortie est

10 
+0

Ne devrait-il pas être ** papi au lieu de *** papi? – Floyd

+0

@Floyd: 'papi' est un tableau de pointeurs vers des pointeurs vers int,' * papi' est un pointeur vers un pointeur vers 'int', '** papi' est un pointeur vers' int', '*** papi 'est un' int'. – mafso

+0

Enfin, comprenez que, *** papi est égal à ** papi [0], merci pour la démo! – Floyd

3

Les noms de tableau sont des valeurs l non modifiables. Vous ne pouvez pas les utiliser comme opérande gauche de l'opérateur =. papi est un nom de tableau. Changer

int *(*papi[10]); 

à

int *(*papi)[10]; // papi is pointer to an array of 10 pointers to int 
+2

vrai mais ne provoque pas l'erreur –

+0

Désolé c'est une faute de frappe et je l'ai corrigé. – Floyd

+0

Merci, je comprends int * (* papi) [10], mais je pensais attribuer une valeur au premier emplacement du tableau papi, n'est-ce pas? – Floyd

2

Vous ne pouvez pas attribuer à un tableau en C. Ce que vous semblez vouloir faire était:

int i = 10; 
int *api[10]; 
api[0] = &i; 
int *(*papi)[10]; 
papi = &api; 

qui déclare papi comme pointeur sur un tableau de 10 pointeurs vers int. C'est le type de &api, ce qui porte l'adresse d'un tableau de 10 éléments à int.

HTH

+0

Eh bien, je n'ai pas trouvé de différence de votre code .... – Floyd

+0

La différence est que ce code compile sans erreur. +1 – delicateLatticeworkFever

+0

Oh, je comprends à propos de ce int * (* papi) [10] ...., mais toujours pas clair sur ce que fait int ** papi [10] et comment utiliser – Floyd