任何人都可以解释我在这里做错了什么不能得到11作为我的输出?
void foo {
int *n = malloc(sizeof(int));
*n = 10;
n++;
printf("%d", *n)
}
答案 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)字节向前移动。