Dr *_*eco 2 c pointers const readonly variable-assignment
我无法弄清楚如何告诉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]);
}
Run Code Online (Sandbox Code Playgroud)
并得到这个错误:
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)'
Run Code Online (Sandbox Code Playgroud)
我知道编译器认为我需要const int v[2]使用a const int *iv.如何获得一个常量指针来完成这项工作?
如果你看到错误信息,我甚至没有移动指针(如pv++).我只是取消引用它错位了一些字节.
如果我这样做:
int *pv=cpv;
*(pv+1)=5; printf("%d\n", v[1]);
printf("%p == %p !?\n", cpv, pv);
Run Code Online (Sandbox Code Playgroud)
我得到了这个警告,但它有效:
constp.c:9: warning: assignment discards qualifiers from pointer target type
pointer# ./constp
5
0x601020 == 0x601020 !?
Run Code Online (Sandbox Code Playgroud)
谢谢,Beco.
移动const限定符:
int *const cpv=v;
Run Code Online (Sandbox Code Playgroud)
说明:在C声明规则中,从标识符开始从右到左读取:" cpv是指向int" 的常量指针.您的版本将被读取" cpv是指向int常量的指针".
请注意,cpv+1仍会获得指向int后的指针*cpv; 一种制造指针const只阻止++,--,+=和-=在其上.
| 归档时间: |
|
| 查看次数: |
461 次 |
| 最近记录: |