Разница в синтаксисе декремента увеличения указателя

0

когда я работаю над указателями на веб-сайте, придерживаюсь точки.

когда ı пишут данный пример, ı может назначать адреса массива на указателе для приращения пример указателя, такого как ptr = arr; и он работает правильно, но когда ı делает то же самое для примера декремента, он не работает, он работает только тогда, когда они пишут как это ptr = & arr [2]. Почему я должен написать амперсанд для примера декремента? В чем разница между этими двумя?

  int main() { int arr[3]={10,20,30}; int *ptr,i; ptr=arr; for(i=0;i<3;i++) { printf("adress of variable arr[%d] %x\n",i+1,ptr); printf("value of arr[%d] = %d\n",i+1,*ptr); ptr++; } return 0; }

  • 0
    arr [2] имеет тип int, вам нужно подать заявку и получить его адрес
  • 0
    в C массив уменьшается до своего адреса, поэтому получение адреса: ptr = array. Однако array [someoffset] пытается получить доступ к этому фактическому содержимому указанного смещения в массиве. Чтобы получить адрес смещения в массиве, код должен получить адрес через: & array [someoffset]
Теги:
pointers

3 ответа

1
Лучший ответ

Разница в том, что в случае "уменьшения" вы используете []. Подумайте об arr как о ссылке на целый массив, таким образом, это нормально (компилятор), чтобы сделать ptr=arr или ptr=&arr с тем же результатом. С другой стороны, arr[3] является ссылкой на объект в массиве, поэтому вам нужно явно указать его адрес (для вас нет оптимизации компилятора).

2

Вам не нужно писать это, просто используйте указатель:

 ptr = var + 2 ;

for(i=0;i<3;i++)
{ 
    printf("%d" , *ptr ) ;
    ptr-- ;

Обратите внимание, что последний элемент находится в +2 не +3.

  • 0
    извините, я написал неправильные коды в объяснении .. я исправил их
2

в случае int arr[3] &arr[0] а arr указывает на одно и то же, базовый адрес массива или адрес первого элемента в массиве. Поэтому в вашем инкрементном случае вам разрешено писать ptr = var что не что иное, как сохранение начального адреса в отдельном указателе.

В случае декрементов нет ничего, что может указывать непосредственно на адрес элемента end-of-array. Таким образом, вы должны использовать адрес последнего элемента [ &arr[n-1], n - размер], чтобы обозначить адрес последнего элемента.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню