65、以下C语言代码的输出是什么?
#include <stdio.h>
#include <stdlib.h>
#define ALLOC_MEMORY 5
int main()
{
int loop = 0;
int *ptr = malloc(ALLOC_MEMORY *sizeof(int));
if(ptr == NULL)
{
perror("fail to allocate memory");
return -1;
}
for(loop=0; loop < ALLOC_MEMORY; ++loop)
{
*(ptr + loop) = loop;
}
printf(" %d",*ptr++);
printf(" %d",(*ptr)++);
printf(" %d",*ptr);
printf(" %d",*++ptr);
printf(" %d",++*ptr);
free(ptr);
return 0;
}
上面示例代码输出结果是:0 1 2 2 3
解释:
第一个 printf:*ptr++
意味着它将增加地址并取消引用该地址,但这里的增量是一个后增量,所以首先和之后取消引用,所以在基地址上你得到 0(ptr 指向下一个位置)。
第二个 printf: (*ptr)++
第一次取消引用,然后增加值,所以位置值是 1
是增量,所以得到 2
(这里的指针没有改变)。
第三个 printf: *ptr
表示当指针指向该位置时取消引用,所以得到 2
。
第五个 printf:*++ptr
表示第一个指针在取消引用后递增,因此得到 2(指针已更改)。
第六个 printf: ++*ptr
表示第一次取消引用,然后增加值,所以得到 3