int a = 5;
Пока все хорошо.
int b = & a; // b будет адресом памяти для 'a'
Это на самом деле ошибка компиляции. Вы, вероятно, имеете в виду int *b=&a;
. b
- это указатель на целое число.
edit: Если вы хотите получить адрес в числовой форме, вам нужно привести приведение к целому числу: int b=(int)&a;
int * c = a; // c будет значением 'a', которое равно 5
Этот более запутанный. По сути, указатель - это просто число, конечно, но этот тип присваивания небезопасен (как вы можете видеть, вы назначаете 5 указателю и пытаетесь разыменовать, что, скорее всего, приведет к сбою вашей программы). Если вы действительно хотите, чтобы c
указывал на область памяти 5, вы должны явно сообщить компилятору, что знаете, что делаете: int *c=(int *)a
.
int * d = & a; // d будет указателем на адрес памяти 'a'
Это верно, так же, как вы, вероятно, подразумеваете под вторым.
int & e = a; // что бы это было?
e
является «ссылкой» на a
. Внутренне это просто указатель на a
, но вам не нужно вручную разыменовывать его, компилятор обрабатывает это за вас.
void FunctionA () {int a = 20; FunctionB (& а); // а сейчас 15? }
Да.
void FunctionB (int * a) {a = 15; }
... при условии, что вы напишите это как *a=15;
. Вы перезаписываете значение, на которое указывает a
, а не сам указатель.
Вы, кажется, в целом смущены этим, я рекомендую прочитать книгу "Мышление в C ++", она действительно хорошо написана!