加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在C中将const赋值给非const

发布时间:2020-12-16 10:18:18 所属栏目:百科 来源:网络整理
导读:在下面的: struct adt { void * A; };int new_adt(const void * const A){ struct adt * r = malloc(sizeof(struct adt)); r-A = A;} 我明白了: warning: assignment discards qualifiers from pointer target type 我知道我可以使用 memcpy((r-A),A,sizeo
在下面的:

struct adt { void * A; };

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

我明白了:

warning: assignment discards qualifiers from pointer target type

我知道我可以使用

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的各种组合.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读