Affectation de pointeurs flottants en C

Ce que je possède actuellement est une fonction simple qui, fondamentalement, réaffecte les pointeurs en fonction du pointeur de paramètre, mais je reçois une erreur indiquant que j’utilise l’une des variables non initialisée. Voici ce que j’ai et l’erreur est renvoyée sur la ligne * x = * k;

float * program(const int *k) { float *x; *x = *k; return x; } 

Cela doit être une solution très simple, mais je sens que je suis en train de le manquer.

Voici ce que fait votre code:

 float * program(const int *k) { // declare a pointer to a float, but don't initialize it, // so it is not actually pointing anywhere specific yet. float *x; // Put the value pointed at by k into the location pointed at by x // But wait - we don't know where x is pointing, so this is BAD! *x = *k; return x; } 

Et c’est pourquoi votre compilateur se plaint.

Il semble que vous réalisiez un transtypage dans une fonction ou que vous réalisiez un transtypage via une fonction.

Le compilateur a raison de dire que x n’est pas initialisé. Par conséquent, l’atsortingbution à *x entraîne un comportement indéfini (et l’avertissement du compilateur obtenu). Ce code pourrait être ce que vous voulez:

 const float *program(const int *k) { const float *x = (float *)k; return x; } 

Vous avez besoin de la dissortingbution – à moins que vous ne compiliez avec beaucoup trop d’avertissements désactivés. Notez que cela vous donne toujours un comportement indéfini, mais qu’il s’agit d’une forme quelque peu différente du comportement indéfini – avec la plupart des systèmes, ce code réinterprète le pointeur int tant que pointeur float et vous obtiendrez des résultats plus ou moins sains. Avec la variable non initialisée, vous ne pouvez simplement pas dire ce qui va se passer; il est bien pire de déréférencer un pointeur non initialisé.

Garde en tête que:
A pointer is a variable that contains memory address. Other words, content of a pointer is memory address. To utilize the address, you have to request the system reserve it for you via malloc, calloc...

Examinons maintenant votre code:
– troisième ligne: float *x; -> vous déclarez un pointeur x pointant vers une adresse mémoire qui sera utilisée pour stocker (certains) numéro (s) flottant (s). Cependant, l’adresse n’est pas encore atsortingbuée, elle se trouve donc n’importe où dans la mémoire de votre système et ne vous est certainement pas réservée.
– quasortingème ligne: *x = *k; -> vous accédez à une allocation de mémoire qui n’a pas été allouée -> une erreur en cours d’exécution. Si vous avez de la chance (aucun programme n’a access à cette mémoire), vous pouvez obtenir une valeur de k .

Ce que vous devez faire ici est d’allouer une mémoire réservée à x en appelant malloc , calloc , …

Si k pointe sur un seul nombre entier, votre code devrait être:

 float *program(const int *k) { float *x; x = (float *)malloc(sizeof(float)); *x = *k; return x; } 

Et si k pointe vers une série de nombres int, essayez de comprendre vous-même 🙂