在C中将指向函数的指针作为只读方式传递

时间:2012-11-18 11:10:52

标签: c function pointers readonly

正如标题所说,我可以传递指向函数的指针,因此它只是指针内容的副本吗? 我必须确保该功能不会编辑内容。

非常感谢。

4 个答案:

答案 0 :(得分:6)

您可以使用const

void foo(const char * pc)

此处pc是指向const char的指针,使用pc无法编辑内容。

但它并不保证您无法更改内容,因为通过创建指向相同内容的另一个指针,您可以修改内容。

所以,这取决于你,你将如何实现它。

答案 1 :(得分:4)

是的,

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指向的不是常量因此*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
} 

Learn here!

答案 2 :(得分:3)

  

我必须确保该功能不会编辑内容

除非函数采用const参数,否则您唯一能做的就是明确地传递一份数据副本,可能是使用memcpy创建的。

答案 3 :(得分:0)

  

我必须确保该功能不会编辑内容。

什么内容?指针指向的值?在这种情况下,您可以声明您的函数

void function(const int *ptr);

然后function()无法更改ptr指向的整数。

如果您只是想确保ptr本身没有改变,请不要担心:它是通过值传递的(如C中的所有内容),因此即使函数更改其ptr参数,这不会影响传入的指针。