Si j'ai un pointeur vide, comment puis-je y mettre un int?
J'ai un tableau de valeurs arbitraires, donc je l'ai défini comme un tableau de pointeurs void, donc je ne peux point à tout type d'information (comme int
des tableaux de caractères, etc). Cependant, comment puis-je attribuer une int
?
Prendre l'exemple de ces initialisations:
void* data[10];
int x = 100;
Mon intuition pense cela, mais cela donne une erreur de compilation:
data[0] = malloc(sizeof(int));
*(data[0]) = x;
Aussi j'ai pensé à utiliser &x
mais je voudrais prendre l'adresse d'une variable locale, qui (à ma connaissance) serait effacé après la sortie de la procédure. Donc, si j'ai une variable locale x
comment pourrais-je l'obtenir dans un vide de type pointeur de variable correctement?
source d'informationauteur pbean
Vous devez vous connecter pour publier un commentaire.
va le faire.
Vous pouvez envisager d'utiliser un syndicat. Quelque chose comme ceci:
Vous pouvez alors
Vous pouvez également
typedef
de l'union.sizeof(union myvalues)
sera le maximum desizeof
les membres. Donc, si vous avezint i;
etchar c[40]
dans l'union,sizeof(union myvalues)
sera de 40. Écrit ài
remplace ensuite les 4 premiers caractères dansc
(en supposant que votre entiers de 4 octets).Une copie de x sera faite, donc le fait que c'est une variable locale n'est pas important.
Bien que vous pouvez utiliser une fonte de procéder à la cession, il est probablement beaucoup plus propre d'écrire le code comme:
pour aliasing raisons de son bien mieux de faire
Il se trouve que le compilateur d'optimiser le memcpy appeler comme sizeof( int ) est une valeur constante, mais il ne cassera pas différents aliasing règles.
essayez ceci:
ou
n'oubliez pas de
par la suite.