在C中将const赋值给非const
在下面的:
struct adt { void * A; }; int new_adt(const void * const A) { struct adt * r = malloc(sizeof(struct adt)); r->A = A; } 我明白了:
我知道我可以使用 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-correctness.该页面的“指针和引用”部分包含一个示例,其中包含可应用于指针的const和非const的各种组合. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |