gpt4 book ai didi

const 指针固定到可变变量

转载 作者:行者123 更新时间:2023-12-04 11:01:11 24 4
gpt4 key购买 nike

我不知道如何告诉 C 我想要一个不会移动的指针。它总是指向同一个数组。也就是说,数组成员不是常量,但数组本身是全局的,因此位于固定位置。

所以,当我编写代码时:

#include <stdio.h>

int v[2]={0, 1};
const int *cpv=v;

int main(void)
{
v[1]=2; printf("%d\n", v[1]);
*(cpv+1)=3; printf("%d\n", v[1]);
cpv[1]=4; printf("%d\n", v[1]);
}

并得到这个错误:

constp.c: In function ‘main’:
constp.c:9: error: assignment of read-only location '*(cpv + 4u)'
constp.c:10: error: assignment of read-only location '*(cpv + 4u)'

我知道编译器认为我需要 const int v[2] 才能与 const int *iv 一起使用。我如何获得一个常量指针来完成这项工作?

如果您看到错误消息,我什至没有移动指针(如 pv++)。我只是取消引用它错位了一些字节。

如果我这样做:

int *pv=cpv;
*(pv+1)=5; printf("%d\n", v[1]);
printf("%p == %p !?\n", cpv, pv);

我收到此警告,但它有效:

constp.c:9: warning: assignment discards qualifiers from pointer target type
pointer# ./constp
5
0x601020 == 0x601020 !?

谢谢,成为。

最佳答案

移动 const 限定符:

int *const cpv=v;

说明:在 C 声明规则中,这是从标识符开始从右到左读取的:“cpv 是指向 int 的常量指针”。您的版本将显示为“cpv 是指向 int 常量的指针”。

请注意,cpv+1 仍会为您提供指向 *cpv 之后的 int 的指针;使指针 const 仅防止 ++--+=-= 就可以了。

关于const 指针固定到可变变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5532779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com