Простой вопрос о передаче указателя на функцию в VC++
Я провел простой тест на передачу указателя на функцию в VC++ с помощью Visual Studio 2017. Я думал, что это очень просто, но оказалось не так, как ожидалось...
#include <iostream> int incr10(int* num); using namespace std; int main(void) { int num = 3; int* pnum = &num cout << endl << "addressed passed =:" << pnum; cout << endl << "incr10(pnum) = " << incr10(pnum) << endl << "num= " << num; //this is not expected value 13 cout << endl << "*pnum is :" << *pnum; cout << endl; return 0; } //function to increment a variable by 10 int incr10(int* num) { cout << endl << "addressed received=:" << num; *num += 10; return *num; }
Я ожидаю num = 13, потому что это значение обновляется внутри функции incr10, но оно все еще num=3.
может быть, я что-то пропустил? или стандарт C++ обновлен на этом термине?
Что я уже пробовал:
Я попробовал, и это бросило вызов моему пониманию этого аргумента о прохождении указателя.
Я получил этот результат из распечатки экрана:
addressed passed =:00D1FB74 addressed received=:00D1FB74 incr10(pnum) = 13 num= 3 *pnum is :13
Joe Woodbury
Это кажется правильным. Я запустил его в VC++ 17, и он работал так, как ожидалось. (Я смутно задаюсь вопросом, была ли проблема с порядком выполнения cout. Попробуйте разделить вывод num на его собственную строку и посмотреть.)
Shao Voon Wong
Это происходит потому, что число появляется в первый раз, прежде чем incr10() называется. Попробуйте установить стандарт C++ на C++17. В C++17, порядок выполнения не гарантируется.
KarstenK
напишите его в качестве ответа ;-)