Come si forza la constanza della memoria puntata da obj-> val1 nella funzione fn?C/C++: Puntatori all'interno di Const Struct
#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;
}
Il codice qui è piuttosto auto-esplicativo. Devo essere in grado di creare un oggetto non const e riempirlo con i dati, ma poi passarlo a una funzione in cui questi dati non possono essere modificati. Come posso andare su questo?
So che posso passare solo un puntatore const int, ma in teoria questa classe contiene molti altri puntatori che avrò bisogno anche in "fn".
Grazie,
Griff
Ahh. Dimentico che le strutture in C++ possono avere metodi e variabili membro. Questo risolverà il mio problema, anche se solo per ridacchiare, è possibile farlo in C? – Griffin
@Griffin: Se davvero volevi assicurarti che probabilmente lo inoltrerai separatamente. –
@Griffin: sì. Vedi la mia risposta, che è valida sia per C che per C++. –