Да, ответ rebind хороший. Возможно, вам будет интересно - с момента запуска C вы, возможно, захотите ознакомиться с терминами call-on-value и call-by-reference . Возможно, знание о них заранее защитит вас от неожиданностей:
void callByValue(int number) {
number = number + 1;
}
void callByReference(int *pnumber) {
*pnumber = *pnumber + 1;
}
void main() {
int x = 5;
callByValue(x);
// here, x is still 5
int y = 5;
callByReference(*y);
// here, y is now 6.
}
Как бы то ни было, также в C вы обнаружите, что параметры число и номер будут связывать с действительными переменными x и y из внешнего мира. В Python тот факт, что у вас есть список a = [4,2,4,6,3,2,5,1,3]
, позволит вам изменить его вне a
на его внутреннее имя v
. Точно так же, как pnumber
разрешил вам это в C. Для сравнения, кортеж не был бы изменяемым и был бы скопирован, то есть a = (4,2,4,6,3,2,5,1,3)
не работал бы. Как и в C, number
- это просто копия из x
- и поэтому x
не изменяется снаружи.
Кстати, я советую вам пропустить C, но продолжайте и возьмите немного C ++. Некоторые вещи там просто приятнее. Например, вы можете сделать это здесь без *pnumber
все время:
void callByReferenceCPlusPlus(int &number) {
number = number + 1;
}
void main() {
int z = 5;
callByReferenceCPlusPlus(z);
// hooray, z is 6!
}
Это может быть дело вкуса, но на самом деле это более просто, не думая постоянно о деталях указателя. На самом деле.