Может кто-нибудь объяснить, что я делаю здесь неправильно, чтобы не получить 11 в качестве результата?
void foo { int *n = malloc(sizeof(int)); *n = 10; n++; printf("%d", *n) }
n++ увеличивает указатель n, а не целое число, на которое указывает n.Чтобы увеличить целое число, вам нужно разыменовать указатель и затем увеличить результат этого:
n++
n
(*n)++;
Если мы называем переменную malloc x, то ваша программа делает это:
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
Вы можете получить 11 в качестве вывода с этим кодом:
void foo { int *n = malloc(sizeof(int)); *n = 10; (*n)++; printf("%d", *n) }
Вы устанавливаете n [0] в 10, а затем печатаете n [1]. malloc () не инициализирует память, которую он вам дает, поэтому то, что печатается, непредсказуемо - это все, что случилось с мусором в n [1].
n ++ перемещает указатель размера байтов (int) вперед.