Я не могу понять, как сказать 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 !?
Спасибо,Беко.