Wie erzwinge ich die Konstanz des Speichers, auf den obj-> val1 in der Funktion fn zeigt?C/C++: Zeiger innerhalb des Konst-Struktes
#include <iostream>
struct foo {
int* val1;
int* val2;
int* val3;
};
void fn(const foo* obj)
{
// I don't want to be able to change the integer that val1 points to
//obj->val1 = new int[20]; // I can't change the pointer,
*(obj->val1) = 20; // But I can change the memory it points to...
}
int main(int argc, char* argv[])
{
// I need to be able to set foo and pass its value in as const into a function
foo stoben;
stoben.val1 = new int;
*(stoben.val1) = 0;
std::cout << *(stoben.val1) << std::endl; // Output is "0"
fn(&stoben);
std::cout << *(stoben.val1) << std::endl; // Output is "20"
delete stoben.val1;
return 0;
}
Der Code hier ist ziemlich selbst erklärend. Ich muss in der Lage sein, ein nicht-konstantes Objekt zu machen und es mit Daten zu füllen, aber es dann an eine Funktion weiterzugeben, wo diese Daten nicht geändert werden können. Wie kann ich das tun?
Ich weiß, ich kann nur einen const int-Zeiger übergeben, aber theoretisch enthält diese Klasse mehrere andere Zeiger, die ich auch in "fn" brauche.
Danke,
Griff
Ahh. Ich vergesse, dass Strukturen in C++ Methoden und Membervariablen haben können. Das wird mein Problem lösen, aber nur für das Gekicher, ist es überhaupt möglich, das in C zu machen? – Griffin
@Griffin: Wenn Sie wirklich sicherstellen wollten, dass Sie es wahrscheinlich separat übergeben würden. –
@Griffin: ja. Siehe meine Antwort, die sowohl für C als auch für C++ gültig ist. –