Здравствуйте! При вызове функции funcx(int *ptr_xxx) в нее передаю указатель, нужно знать точно при этом действии функция получает именно адрес внешнего указателя и создает еще один, правда локальный указатель внутри себя, или же локальный указатель с тем же адресом не создается, а расширяется область видимости внешнего?
Интуитивно думал, что будет расширятся область видимости внешнего указателя, чтобы не тратить время на создание нового локального, но тесты показали, что дополнительный указатель создается и минус при этом, что нельзя внутри функции присвоить новый адрес локальному указателю и чтобы при этом внешний указатель принял новый адрес...
Пример:
==============
#include <iostream>
void funcx(int *ptr_xxx) {
std::cout << "2: " << ptr_xxx << "!\n";
ptr_xxx = new int;
std::cout << "3: " << ptr_xxx << "!\n";
}
int main() {
int* ptr_int;
std::cout << "1: " << ptr_int << "!\n";
funcx(ptr_int);
std::cout << "4: " << ptr_int << "!\n";
return 0;
}
==============
После выполнения:
1: 0x1! (в мейн)
2: 0x1! (внутри функции получили адресс)
3: 0x804d030! (в нутри функции новый адрес)
4: 0x1! (опять в мейн)
---------
конкретно этот пример можно решить и вернуть указатель через int* funcx(); но как быть если одна функция меняет адреса наподобие примера нескольким указателям funcx(int *ptr_xxx, int *ptr_yyy ). новые адреса для ptr_xxx и ptr_yyy одновременно не вернешь...
Спасибо заранее за пояснения!