Почему целое число не увеличивается в этом коде? - PullRequest
1 голос
/ 19 июня 2010

Может кто-нибудь объяснить, что я делаю здесь неправильно, чтобы не получить 11 в качестве результата?

void foo {
    int *n = malloc(sizeof(int)); 
    *n = 10; 
    n++;
    printf("%d", *n)
}

Ответы [ 5 ]

25 голосов
/ 19 июня 2010

n++ увеличивает указатель n, а не целое число, на которое указывает n.Чтобы увеличить целое число, вам нужно разыменовать указатель и затем увеличить результат этого:

(*n)++;
9 голосов
/ 19 июня 2010

Если мы называем переменную malloc x, то ваша программа делает это:

                                      n     x
int *n = malloc(sizeof(int));        &x     ?
*n = 10;                             &x    10
n++;                                &x+1   10

Вы хотите сделать это:

                                      n     x
int *n = malloc(sizeof(int));        &x     ?
*n = 10;                             &x    10
(*n)++;                              &x    11
2 голосов
/ 19 июня 2010

Вы можете получить 11 в качестве вывода с этим кодом:

void foo {
    int *n = malloc(sizeof(int)); 
    *n = 10; 
    (*n)++; 
    printf("%d", *n)
}
2 голосов
/ 19 июня 2010

Вы устанавливаете n [0] в 10, а затем печатаете n [1]. malloc () не инициализирует память, которую он вам дает, поэтому то, что печатается, непредсказуемо - это все, что случилось с мусором в n [1].

1 голос
/ 19 июня 2010

n ++ перемещает указатель размера байтов (int) вперед.

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