J'ai vu un code C ++ où une structure est définie comme ci-dessous avec Weird Je dois utiliser la structure ci-dessus et renvoyer un objet de celui-ci à partir d'une fonction. Mais pour cette façon d'initialiser la variable code> texte code> à une chaîne constante? En outre, comment accéder à la chaîne pointée par const char * const * code>
texte code> à partir de la fonction de l'appelant. P>
3 Réponses :
Vous ne pouvez pas attribuer à une variable constante, mais vous pouvez initialiser em> une telle variable:
Cela donne l'erreur une valeur de type "const char *" ne peut pas être utilisée pour initialiser une entité de type "const char * const *" code>
Oh, super, et comment accéder / imprimer la chaîne de la fonction principale?
STD :: COUT << ** Struct_obj.text << std :: endl; code> imprime uniquement le premier caractère.
@KaAustav c'est parce que vous dréérence le pointeur deux fois. Une fois pour la chaîne, une seconde fois pour le premier élément de la chaîne.
Les constantes sont immuables, elles ne peuvent donc pas être assignées. Ils ne peuvent être initialisés que. Pour renvoyer une telle structure d'une fonction, vous pouvez utiliser l'initialisation globale (initialisation de la corset bouclé). Cette structure peut être initialisée avec n'importe quel char * **, mais celui-ci ne peut être lu que sur le char * **, mais ne peut pas le modifier.
TestStruct TestFunction() { char** lines = new char*[2]; // Work with char** stored in lines *(lines + 0) = new char[10]; *(lines + 1) = new char[20]; void* data = nullptr; return TestStruct{ lines , data }; } int main() { TestStruct my_struct = TestFunction(); // const char* const * means it's an immutable array of immutable CStrings const char* line_one = *my_struct.text; const char* line_two = *(my_struct.text + 1); std::cout << line_one << std::endl; std::cout << line_two << std::endl; }
Mais comment libérer la mémoire allouée par Nouveau Char [x] Code> Déclarations?
Vous pouvez const_cast
TestStruct struct_obj; ... (char*&)struct_obj.text = "works";