индекс массива и адрес возвращают одно и то же значение - PullRequest
8 голосов
/ 04 сентября 2010
#include<stdio.h>
int main(void) {
  int a[3] = {1,2,3};
  printf("\n\t %u %u %u \t\n",a,&a,&a+1);
  return 0;
}

Теперь я не понимаю, почему а и & возвращают одно и то же значение, в чем причина и практическое применение?Кроме того, каков тип & a и могу ли я также сделать & (& a)?

1 Ответ

10 голосов
/ 04 сентября 2010

Теперь я не понимаю, почему 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 вызывает неопределенное поведение)

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