C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在C中将const赋值给非const大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在下面的:

struct adt { void * A; };

int new_adt(const void * const A)
{
    struct adt * r = malloc(sizeof(struct adt));
    r->A = A;
}

我明白了:

我知道我可以使用

@H_860_7@memcpy(&(r->A),&A,sizeof(void *));

解决它,但我必须问:有什么选择吗?

通过使用COnst void * const,我假装没有对输入进行任何更改.而且,现在我想起来了,const void *就足够了,不是吗? (因为我无法更改指针以便它影响调用者)

感谢您抽出宝贵时间阅读.

解决方法

如果你永远不想通过它的指针从adt修改A,那么你也应该将指针设为const,即:

struct adt {
    const void * A;
};

这将使错误消失.

如果你想修改A到adt,那么new_adt应该采用非const指针.

编辑:更一般的说明,这可能会有所帮助:

通常,const关键字适用于其左侧的类型.但是,如果左侧没有类型,则它将应用于右侧的类型.所以:
const int * A与int const * A相同(const适用于int,而不是指针),但在int * const A中,const适用于指针,而不适用于int.

维基百科上有一个全面的解释:const-correctness.该页面的“指针和引用”部分包含一个示例,其中包含可应用于指针的const和非const的各种组合.

大佬总结

以上是大佬教程为你收集整理的在C中将const赋值给非const全部内容,希望文章能够帮你解决在C中将const赋值给非const所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。