int * getInt2(int a[]) {
(*a) *= 2;
return a;
}
int main(int argc,char *argv[])
{
int intInit = 1;
int * (*intPtr)(int *) = getInt2;
cout << intInit++ << ":" << intInit << endl;
cout << intPtr(&intInit) << ":" << intInit<<endl;
cout << intInit << endl;
cout << *intPtr(&intInit) << endl;
cout << (*intPtr)(&intInit) << ":" << *(*intPtr)(&intInit) << endl;
cout << intInit << endl;
}
реальный результат при запуске:
1:2
012FFABC:2
4
8
012FFABC:16
32
но я ожидаю, что он будет:
1:2
012FFABC:4
4
8
012FFABC:32
32
что я неправильно понял? Есть ли причина, почему он задерживается?спасибо за любую подсказку.
Я вижу, что кто-то думает, что поведение выражения не определено в c ++, и фокус всегда находится в операции автоинкремента, поэтому я добавляю пример:
int addTarget(int &n) {
n += 1;
return n;
}
int multiplyTarget(int &n) {
n *= 2;
return n;
}
int main(int argc,char *argv[])
{
int intTest = 1;
cout << multiplyTarget(intTest) << ":" << addTarget(intTest) << endl;
cout << addTarget(intTest) << ":" << multiplyTarget(intTest) << endl;
}
над кодомрезультат:
4:2
9:8
Я вижу, что кто-то говорит, что выходная последовательность слева направо, а последовательность операций справа налево. Это может объяснить большинство ситуаций. Но я думаю, что первый вывод первого примера долженбыть 1: 1 не 1: 2 в соответствии с этой теорией. Я действительно хочу знать теорию.