Maison  >  Article  >  développement back-end  >  Pourquoi une affectation de pointeur vide fonctionne-t-elle en C mais échoue-t-elle en C ?

Pourquoi une affectation de pointeur vide fonctionne-t-elle en C mais échoue-t-elle en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-28 20:55:02421parcourir

Why Does a Void Pointer Assignment Work in C But Fail in C  ?

Comprendre les différences entre les pointeurs de vide entre C et C

Dans le domaine de la programmation, comprendre les différences entre C et C est crucial, en particulier quand il s'agit de pointeurs vides. Une question courante se pose concernant la raison pour laquelle un code C particulier se compile avec succès mais échoue en C.

Attribution de pointeurs vides en C vs. C

Le problème initial mis en évidence est l'incapacité de C pour attribuer le pointeur vide renvoyé par malloc() à un pointeur entier (int*). En C, cependant, de telles affectations sont autorisées en raison de ses conversions implicites.

Conversions explicites de C avec des pointeurs vides

Contrairement à C, C applique des conversions explicites lors de l'attribution de pointeurs vides à d'autres pointeurs. Cela signifie qu'un transtypage est nécessaire pour convertir un pointeur vide (void) en un pointeur entier (int).

Règles de conversion et principe K&R2

Le principe K&R2 en C stipule que tout pointeur vers un objet peut être converti en type void* sans perte de données. De même, la reconversion de ce pointeur vide en son type de pointeur d'origine préservera la valeur d'origine.

Norme C sur les conversions de pointeurs vides

S'appuyant sur les principes C, le C la norme impose en outre que les conversions de T en void restent implicites. Cependant, les conversions de void* vers tout autre type de pointeur doivent être explicitement converties.

En résumé, alors que C autorise les conversions implicites vers et depuis des pointeurs void, C nécessite des conversions explicites pour les conversions de void* vers d'autres types de pointeurs. Cette distinction garantit la sécurité des types et évite les erreurs potentielles dans le code C.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn