Почему адрес указателя изменяется при передаче? - PullRequest
0 голосов
/ 18 апреля 2020

при реализации BST самостоятельно с использованием struct, я запутался в том, как работает указатель.

вот мой простой код

#include <iostream>
#include <vector>
using namespace std;
void ptr_change(int* p){
    cout<<&p<<endl;
    /*
     *address changes. why ? */
    return ;
}
int main(){
    //4. Pointer address integrity
    cout<<"4. Pointer address integrity"<<endl;
    int* p1;
    cout<<&p1<<endl;
    ptr_change(p1);
}

Почему адрес меняется после его передачи к функции в качестве параметра ?? Спасибо тебе!

Ответы [ 2 ]

3 голосов
/ 18 апреля 2020

Адрес не изменился. Вы смотрите на две отдельные переменные.

В функции main вы определяете переменную с именем p1. Эта переменная имеет определенный адрес. Затем вы передаете значение из p1 в функцию ptr_change.

В ptr_change, у него есть параметр с именем p. Эта переменная имеет свой собственный адрес, отличный от p1 в main, хотя она содержит то же значение, что и p1.

Вы можете быть сбиты с толку, поскольку рассматриваемый параметр является указателем. Это ничем не отличается от параметра без указателя. Например:

void foo(int x)
{
    cout << &x << end;
}

int main()
{
    int y = 0;
    cout << &y << end;
    foo(y);
    return 0;
}

Здесь x в foo и y в main - это разные переменные, каждая со своим адресом, но обе они содержат значение 0.

1 голос
/ 18 апреля 2020

Вы передаете копию указателя на функцию. Это как когда вы передаете переменную -say-int, вы передаете копию ее значения. Когда вы передаете указатель на int, вы копируете сам указатель, который также указывает на то же место в памяти, но сам указатель может храниться в другом случайном месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...