¿Cómo fuerzo la const-ness de la memoria apuntada por obj-> val1 en la función fn?C/C++: Punteros dentro de 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;
}
El código aquí es bastante autoexplicativo. Necesito poder hacer un objeto no const y llenarlo con datos, pero luego pasarlo a una función donde estos datos no se pueden modificar. ¿Cómo puedo hacer esto?
Sé que puedo pasar un puntero const int, pero teóricamente, esta clase contiene varios otros punteros que necesitaré en "fn" también.
Gracias,
Griff
Ahh. Olvidé que las estructuras en C++ pueden tener métodos y variables miembro. Eso resolverá mi problema, aunque solo para risas, ¿es posible hacer esto en C? – Griffin
@Griffin: si realmente desea asegurarse de que probablemente lo pase por separado. –
@Griffin: sí. Vea mi respuesta, que es válida tanto para C como para C++. –