正如标题所说,我能传递一个指针给函数,以便只复制指针的内容吗? 我必须确保函数不修改这些内容。非常感谢。
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);
}
void function(int* const ptr)
中,ptr是常量,但是它指向的内容不是常量,因此 *ptr=10
是正确的表达式!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
}
你可以使用const
void foo(const char * pc)
这里的pc
是指向const char的指针,通过使用pc
,你无法编辑其内容。
但这并不保证你无法改变内容,因为你可以创建另一个指向同一内容的指针来修改内容。
所以,如何实现取决于你自己。
我必须确保该函数不会编辑内容
除非该函数使用const
参数,否则您唯一能做的就是显式传递数据的副本,可以使用memcpy
创建。
void function(const int *ptr);
那么function()
不能更改指向ptr的整数。
如果您只想确保未更改ptr
本身,请不用担心:它是按值传递的(与C中的所有内容一样),因此即使函数更改其ptr
参数,也不会影响传入的指针。
void func(const int *ptr)
函数,那么写 *(int *)ptr = 42;
是未定义的行为,所以你是错误的。 - user529758