Теперь я не понимаю, почему a и & возвращают одно и то же значение, в чем причина
a
- это имя массива, которое затухает, чтобы указывать на первый элемент массива.
&a
- это не что иное, как адрес самого массива, хотя a
и &a
выводят одно и то же значение, их типы различны.
Также, каков тип & a?
Указатель на массив, содержащий три int
с, т.е. int (*)[3]
Могу ли я также сделать & (& a)?
Нет, адрес оператора требует, чтобы его операнд был lvalue. Имя массива является неизменяемым lvalue, поэтому &a
допустимо, а &(&a)
- нет.
Тип печати &a
( C ++ Only )
#include <typeinfo>
#include <iostream>
int main()
{
int a[]={1,2,3};
std::cout<< typeid(&a).name();
}
P.S:
Использовать %p
спецификатор формата для печати адреса (использование неверного спецификатора формата в printf
вызывает неопределенное поведение)