#include using namespace std; void changeInteger(int n); void changeIntegerPerPointer(int* pN); int changeIntegerPerReturn(int n); void changeIntegerPerReference(int& n); int main() { // general int* pNumber = nullptr; pNumber = new int(0); cout << "size of pNumber: " << sizeof(pNumber) << endl; cout << "size of pNumber data: " << sizeof(*pNumber) << endl; *pNumber = 567; //pNumber = new int(0); // BAD BAD - Memory Leak, because we override an existing pointer address with a new one without saving the old one // here are 100s of lines of code if (pNumber != nullptr) { delete pNumber; pNumber = nullptr; } // pointer as references int number = 0; changeInteger(number); changeIntegerPerPointer(&number); changeIntegerPerPointer(pNumber); changeIntegerPerReference(number); return 0; } void changeInteger(int n) { n = 100; } void changeIntegerPerPointer(int* pN) { cout << "address of pN: " << &pN << endl; if (pN == nullptr) return; // BE CAREFUL - if you don't what you get, do a test before *pN = 200; } void changeIntegerPerReference(int& n) { n = 300; }