如何使用struct const指针作为函数参数来控制struct成员行为?

时间:2016-07-20 10:53:25

标签: c pointers const

我有一个C代码,有点类似于此:

struct st
{
    int *var;
}

void fun(st *const ptr)
{
    // considering memory for struct is already initialized properly.
    ptr->var = NULL; // NO_ERROR
    ptr = NULL; // ERROR, since its a const pointer.
}

void main()
{ 
    //considering memory for struct is initialized properly
    fun(ptr);
}

我不想在结构定义中将int *var声明为const,以免混淆庞大的代码库。不希望对结构定义进行任何更改 在C中是否有任何方法可以获得NO_ERROR行的错误 ptr->var = NULL; // NO_ERROR

4 个答案:

答案 0 :(得分:2)

只需用const声明参数,因此ptr是指向const对象的指针:

void fun(const struct st* ptr)

答案 1 :(得分:0)

您的声明使ptr保持不变,但不是它指向的对象。另请不要错过struct关键字

void fun(struct st *const ptr);

相反,你应该使用

void fun(const struct st *ptr);

这种声明允许更改指针,但不能更改指向的对象。

答案 2 :(得分:0)

记住这一点:

  • 使用type* const ptr,您无法更改指针,但可以更改指向数据
  • 使用const type* ptr,您可以更改指针,但无法更改指向数据

所以您只需要将struct st* const ptr替换为const struct st* ptr

答案 3 :(得分:0)

优异!十分感谢大家! 我这样做了 - void fun(const struct st * const ptr); 当我改变ptr和ptr-> var时,我能够得到一个错误。正是我需要的......