我不知道如何告訴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 !?
感謝, 貝喬。
謝謝!非常好的解釋。我的意圖就是:指針總是指向該數組的第一個元素。 ;) – 2011-04-03 22:05:23