А где сама переменная тогда? Ее адрес невозможно получить?)
Возможно, вам поможет понимание, где в памяти во время выполнения программы какие переменные располагаются и чему равно их значение.
Случай 1:
У вас на стеке создается переменная
b. То есть, есть ячейка в памяти, в которой записано значение этой переменной.
Случай 2.
int main() {
int *a = new int[10];
}
У вас аллоцируется в куче участок памяти размером 40 байт, в котором будут записаны значения элементов массива, адрес первого элемента записывается в переменную
a, которая на стеке. То есть, кроме самого массива, есть еще и ячейка памяти, где записан адрес этого массива.
Случай 3.
int main() {
int a[10];
}
В этом случае у вас на стеке создается массив размером 40 байт. При этом адрес этого массива никуда не записывается. В плане расположения переменных в памяти этот случай абсолютно идентичен такому:
int main() {
int a0,a1,a2,a3,a4,a5,a6,a7,a8,a9;
}
Переменные есть, но их адреса ни в какие другие переменные не записаны, потому что мы других переменных и не завели.