Почему этот вывод программы c, как это? - PullRequest
1 голос
/ 04 июля 2011
#include<stdio.h>
main
{
    int x[]={1,2,3,4,5};
    int i,*j;
    j=x;
    for(i=0;i<=4;i++)
    {
        printf("%u",j);
        j++;
    }
}

выход:

65512
65514
65516
65518
65520

Но когда я изменяю printf на "

printf("%u",&j[i]);

Вывод:

65512
65516
65520
65524
65528

Почему адрес отличается на 2 в первом случае и на 4 во втором случае?

Что не так с простой печатью j и печатью &j[i]?

Ответы [ 2 ]

3 голосов
/ 04 июля 2011

Вы получаете скачки 4 во втором примере, потому что вы увеличиваете смещение j и на i! Оба из них дают разницу в 2 *. 1005 *

Обратите внимание, что printf не является типобезопасным; Вы должны убедиться, что аргументы соответствуют спецификаторам формата. Вы указали %u, но дали ему int *, вы должны использовать %p для указателей.

0 голосов
/ 04 июля 2011

Во-первых, просто чтобы прояснить, вы печатаете указатель j, а не указанное значение, *j

Теперь относительно печатного адреса. Во втором примере:

for(i=0;i<=4;i++)
{
  printf("%u",&j[i]); 
  j++;

&j[i] равно (j+i). i увеличивается на каждую итерацию, что добавляет 2 к значению указателя, и j тоже увеличивается, что добавляет еще 2.

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