Ну указатели - довольно запутанная тема, но мне нравится изучать ее, хотя иногда программирование сказывается на мне. Во всяком случае, я практиковал какой-то вопрос и застрял на этом. Не могли бы вы объяснить вывод приведенного ниже кода.Указатели Значения
#include<iostream>
using namespace std;
void change(int *b,int n)
{
int i;
for(i=0;i<n;++i)
*(b+i)=*(b+i)+5;
}
int main()
{
int a[]={2,4,6,8,10};
int i;
change(a,5);
for(i=0;i<=4;++i)
cout<<a[i]<<"\n";
}
Здесь в функции change утверждение в цикле for дает мне проблему. В этом операторе присваивания в левой части *(b+i)
хранится значение *(b+1)+5
, но как получается, что значение сохраняет другое значение как *(b+i)
, дает значение каждый раз, скажем для первой итерации i is 0
, которая выражает выражение *(b+0)=*(b+0)+5
. Таким образом, LHS здесь 7, а RHS - 2, что дает 2 = 7. Не следует ли давать ошибку, например, требуемую lvalue или что-то в этом роде?
Сторона: верхняя ссылка в соответствующем списке справа от этого вопроса может оказаться образовательной. И ваш код вызывает * неопределенное поведение *. Последняя итерация через ваш цикл записывает и считывает из памяти один элемент за пределами вашего объявленного размера. – WhozCraig