为什么整数在此代码中不递增?

时间:2010-06-19 01:56:30

标签: c

任何人都可以解释我在这里做错了什么不能得到11作为我的输出?

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

5 个答案:

答案 0 :(得分:25)

n++递增指针n,而不是n指向的整数。要递增整数,需要取消引用指针,然后递增结果:

(*n)++;

答案 1 :(得分:9)

如果我们调用malloc'ed变量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 :(得分:2)

将n [0]设置为10,然后打印n [1]。 malloc()没有初始化它给你的内存,因此打印的内容是不可预测的 - 它是n [1]中发生的垃圾。

答案 3 :(得分:2)

使用此代码可以获得11作为输出:

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

答案 4 :(得分:1)

n ++将指针sizeof(int)字节向前移动。