【发布时间】:2011-07-28 19:33:01
【问题描述】:
我不知道如何告诉 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 !?
谢谢, 贝科。
【问题讨论】:
标签: c pointers constants variable-assignment readonly