Я поместил этот код в eclipse и запустил его

main()
{
  int *p, *q, *r;
  int a = 10, b = 25;
  int c[4] = {6,12,18,24};

  p = c;

  printf("p = %d\n" ,p);
}

Вывод, который я получаю, равен p = 2358752

Что это число должно обозначать? Это адрес переменной?

Если то, что я говорю выше, верно, будет ли мой ответ на следующий вопрос правильным?

Итак, допустим, следующее хранится в следующих местах

address      variables

5000         p

5004         q

5008         r

500C         a

5010         b

5014        c[0]

5018        c[1]

501C        c[2]

5020        c[3]

Так будет линия

p = c;

Быть 5014?

2
user3393513 17 Апр 2014 в 06:20

2 ответа

Лучший ответ

Да, p - это адрес c, который совпадает с адресом c[0]. И да, во втором примере p будет равно 5014.

1
slaadvak 17 Апр 2014 в 02:24
int *p,

Вышеупомянутый оператор определяет p как указатель на целое число. В приведенном ниже операторе c неявно преобразуется в указатель на первый элемент массива a.

p = c;
// equivalent to
p = &c[0];

Следовательно, p содержит адрес первого элемента массива. Кроме того, спецификатор преобразования для печати адреса - %p.

printf("p = %p\n", (void *)p);
// prints the same address
printf("c = %p\n", (void *)c);
2
ajay 17 Апр 2014 в 02:35