У меня есть код, который я пытаюсь проанализировать, чтобы изучить указатели, и я хотел бы попросить о помощи, правильно ли я его интерпретирую, и если я не могу кого-то помогите интерпретировать это для меня, потому что я все еще нахожу указатели, чтобы сбивать с толку. Вы сможете увидеть мои интерпретации сразу после //.Указатели на понимание С ++
int main()
{
int x = 5;
int y = 3;
int a[] = {5, 10, 15};
PointerMystery(&x, y, a);
cout << x << " " << y << endl;
for (int i = 0; i < 3; i++) {
cout << a[i] << " ";
}
cout << endl;
return 0;
}
void PointerMystery(int *pa, int b, int c[]) {
// *pc will return array c
int *pc = c;
// *pa which returns the address of x will now make x = 20.
*pa = 20;
// b which was 3 is now equal to 15, therefore y = 15
b = 15;
// *pc which returned a array is now 15(im not so sure about this?)
*pc = b;
// im not sure what is happening here either?
pc += 2;
// *pc will return the value (20) - 10?
*pc = *pa - 10;
cout << *pa << " " << b << " " << *pc << endl;
for (int i = 0; i < 3; i++) {
cout << c[i] << " ";
}
cout << endl;
}
Вы можете легко проверить свои мысли. – Maroun
'pc + = 2;' перемещает вас по двум местам в массиве 'c []'. Будьте осторожны, чтобы не пропустить конец массива. Google «Арифметика указателей» для получения более подробной информации. – Bathsheba
Массивы распадаются на указатели при передаче в качестве аргументов функций, поэтому в функции переменная 'c' уже является указателем. И при использовании оператора разыменования вы не получаете адрес указателя, вы получаете значение того, на что оно указывает. Чтобы получить адрес, хранящийся в указателе, просто используйте сам указатель (указатели - это, по сути, целые переменные, значение которых является адресом). –