我有一个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
?
答案 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时,我能够得到一个错误。正是我需要的......