Casting un vide pointeur vers une struct
J'ai commencé à me sentir à l'aise avec le C et ensuite, j'ai couru dans la conversion de type. Si j'ai de la suite définie dans un *.h fichier
struct data {
int value;
char *label;
};
et ce dans un autre *.h fichier
# define TYPE void*
Comment puis-je lance le vide pointeur vers la structure de sorte que je peux utiliser une variable de TYPE "val" qui est passé dans les fonctions? Par exemple, si je veux utiliser la valeur de TYPE val points, comment dois-je le jeter alors que je peux passer cette valeur à l'autre des fonctions?
#define TYPE void*
est une mauvaise idée. Il devrait au moins être un typedef
à la place. Envisager ce qui se passerait dans la déclaration suivante: TYPE x, y;
ou const TYPE x;
.Aussi, si vous avez affaire à
void*
pointeurs et C, vous n'avez pas besoin de faire un cast explicite. C permet void*
pointeurs implicitement cast: void* p = ...; struct data* val = p;
.Je suis d'accord que c'est une mauvaise idée, mais ce n'est pas mon idée, donc je dois aller avec elle. Ainsi que, lorsque
TYPE val
est passé dans une fonction comme un vide, pointeur, je peux simplement déclarer struct data* temp = val;
puis passe temp à une fonction et je devrais être capable d'utiliser ensuite temp->valeur?Oui, vous pouvez ensuite utiliser
temp->value
.Merci, votre réponse était simple et utile. Si elle a été posté dans la section réponse, je lui donnerais un upvote.
OriginalL'auteur user1852050 | 2013-02-18
Vous devez vous connecter pour publier un commentaire.
vais jeter un pointeur sur void à un pointeur sur un
struct data
.vous confondez struct variables et de pointeur vers une struct variables. Lorsque vous avez besoin pour obtenir un pointeur vers une struct vous pouvez utiliser le
&
de l'opérateur.J'ai donc pu déclarer et d'allouer de la mémoire pour un temp struct puis donner la valeur de &val? Comme dans le temp = &val. Et puis obtenir la valeur en utilisant temp->valeur?
Vous ne semblez pas comprendre les pointeurs. Des pointeurs vers les choses sont telles que des adresses de maisons sur la rue, mais ils ne sont pas les maisons elles-mêmes. Pour obtenir l'adresse d'un
house
en C, vous ne&house
. Pour obtenir lehouse
par son adresse/pointeur en C, vous ne*pointer
. Sipointer
a déjà été obtenu commepointer = &house;
et sipointer
points de type dehouse
, puis*pointer
est équivalent à*(&house)
et, finalement, àhouse
.Les pointeurs à une valeur non-nulle de type
T
, à la différence des pointeurs versvoid
, peut être déréférencé (c'est ce que nous avons fait avec*pointer
) et dans le processus de renvoyer un objet de typeT
. Donc, si vous convertir un pointeur vers le type dehouse
(pointant vers unhouse
), par exemple, un pointeur vers le type decastle
, ensuite référence à la conversion d'un pointeur ne vous donnera pas un objet de typecastle
, parce que vraiment le pointeur pointe toujours à unehouse
.OriginalL'auteur Alexey Frunze
Typecasting vide pointeur vers une struct peut être fait en suivant
pour cela, nous pouvons transtypage de struct
disons que tu veux envoyer cette vptr comme variable de structure à une fonction
puis
Note: nous pouvons transtypage de nulle pointeur vers n'importe quel type, c'est le but principal de nulle pointeurs.
we can typecast void pointer to any type
, par exemple), et il n'répondre à la question (quoique pas très clair)OriginalL'auteur Mahadev