Just as the title says, can I pass a pointer to a function so it's only a copy of the pointer's contents? I have to be sure the function doesn't edit the contents.
Thank you very much.
Just as the title says, can I pass a pointer to a function so it's only a copy of the pointer's contents? I have to be sure the function doesn't edit the contents.
Thank you very much.
I have to be sure the function doesn't edit the contents
Unless the function takes a const
parameter, the only thing you can do is explicitly pass it a copy of your data, perhaps created using memcpy
.
You can use const
void foo(const char * pc)
here pc
is pointer to const char and by using pc
you can't edit the contents.
But it doesn't guarantee that you can't change the contents, because by creating another pointer to same content you can modify the contents.
So,It's up to you , how are you going to implement it.
Yes,
void function(int* const ptr){ int i; // ptr = &i wrong expression, will generate error ptr is constant; i = *ptr; // will not error as ptr is read only //*ptr=10; is correct } int main(){ int i=0; int *ptr =&i; function(ptr); }
In void function(int* const ptr)
ptr is constant but what ptr is pointing is not constant hence *ptr=10
is correct expression!
void Foo( int * ptr, int const * ptrToConst, int * const constPtr, int const * const constPtrToConst ) { *ptr = 0; // OK: modifies the "pointee" data ptr = 0; // OK: modifies the pointer *ptrToConst = 0; // Error! Cannot modify the "pointee" data ptrToConst = 0; // OK: modifies the pointer *constPtr = 0; // OK: modifies the "pointee" data constPtr = 0; // Error! Cannot modify the pointer *constPtrToConst = 0; // Error! Cannot modify the "pointee" data constPtrToConst = 0; // Error! Cannot modify the pointer }
I have to be sure the function doesn't edit the contents.
What contents? The value pointed to by the pointer? In this case, you can declare your function like
void function(const int *ptr);
then function()
cannot change the integer pointed to by ptr.
If you just want to make sure ptr
itself is not changed, don't worry: it's passed by value (as everything in C), so even if the function changes its ptr
parameter, that won't affect the pointer that was passed in.