Làm cách nào để buộc const-ness của bộ nhớ được trỏ tới bởi obj-> val1 trong hàm fn?C/C++: Con trỏ trong cấu trúc Const
#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;
}
Mã ở đây khá tự giải thích. Tôi cần để có thể tạo một đối tượng không phải là const và điền nó với dữ liệu, nhưng sau đó chuyển nó vào một hàm mà dữ liệu này không thể sửa đổi được. Làm thế nào tôi có thể đi về điều này?
Tôi biết tôi chỉ có thể vượt qua trong một con trỏ const int, nhưng về mặt lý thuyết, lớp này có chứa một số con trỏ khác mà tôi sẽ cần trong "fn" là tốt.
Cảm ơn,
Griff
Ahh. Tôi quên rằng các cấu trúc trong C++ có thể có các phương thức và các biến thành viên. Điều đó sẽ giải quyết vấn đề của tôi, mặc dù chỉ cho cười khúc khích, là nó có thể ở tất cả để làm điều này trong C? – Griffin
@Griffin: Nếu bạn thực sự muốn chắc chắn rằng bạn có thể truyền nó một cách riêng biệt. –
@Griffin: vâng. Xem câu trả lời của tôi, có giá trị cho cả C và C++. –