scalaire objet nécessite un élément de l'initialiseur
Pourquoi quand je veux initialiser la suite de vecteur de uint8_t
uint8_t *mmac_source1 = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x01 };
J'obtiens cette erreur
Error: scalar object 'mmac_source1' requires one element in initializer
Mais quand je suis en utilisant ceci :
uint8_t mmac_source1[6] = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x01 };
ça fonctionne.
u_int8_t mmac_source1[] = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x01 }; Devrait vous donner les avantages des deux mondes - vous pouvez écrire l'initialiseur, et vous n'avez pas à spécifier la taille.
OriginalL'auteur Roxana Istrate | 2014-07-23
Vous devez vous connecter pour publier un commentaire.
Ici, vous n'avez pas la mémoire allouée pour le pointeur.
mmac_source1
seulement des actes en tant que titulaire endroit où vous pouvez stocker une adresse.Ici, vous avez un tableau où dans votre compilateur alloue
sizof(uint8_t)*6
octets.il est 6 octets, c'était une faute de frappe
OriginalL'auteur Ginu Jacob
Dans de nombreux cas, un pointeur est interchangeable avec un tableau. Plus formellement, on peut dire que le premier élément d'un tableau se désintègre à un pointeur.
Mais il y a des exceptions, et l'on vous citez dans votre question est l'un d'entre eux:
uint8_t *mmac_source1 = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x01 };
n'est pas syntatically valide. Sur le plan conceptuel que vous allouez, dans votre deuxième cas, le tableau sur la pile. À l'aide d'un pointeur dans cette instance ne fait pas de sens.OriginalL'auteur Bathsheba
La rvalue prévu pour une initialisation pointeur est une adresse mémoire.
Comme dans le cas des tableaux, le compilateur permet le cas particulier que nous voulons pour initialiser le contenu du pointeur de points avec des constantes au moment même où le pointeur est déclaré:
La déclaration ci-dessus est similaire à
La prochaine question est de savoir si nous sommes autorisés à effectuer les opérations suivantes :
Oui nous sommes, mais à nos risques et périls. Le compilateur va d'abord venir avec
une erreur:
Ici, le compilateur considère la rvalue simplement comme un entier, où ce qu'il attend est un emplacement de mémoire disons, par exemple, &un. Dans le même temps
il a fourni une option fpermissive à overrride de son hypothèse selon laquelle
nous pouvons forcer la rvalue à ressembler à une adresse de mémoire.fpermissive drapeau
dégradations de certains diagnostics sur nonconformant code de des erreurs, des avertissements. Donc, lors de la compilation, je n'ai
g++ -fpermissive intpointerexample.cpp -o intpointerexample
Finalement sur l'exécution de intpointerexample, j'ai rencontré une erreur de segmentation parce que je pourrais avoir tenté d'accéder à la mémoire le programme ne dispose pas des droits d'.
OriginalL'auteur sjsam