为什么我得到此元素的内存地址?

时间:2019-03-22 00:41:33

标签: c

测试“ * ++ p”应如何用C语言编写,我在代码块中调试了我的代码,但得到的值是:“ * ++ p = 6356748”;根据C入门入门书的规定,应为20.为什么我得到这个? 这是我的代码:

#include <stdio.h>
void main()
{
    int arr[]={10,20};
    int *p=arr;
    printf("*P=%d\n",*p);
    printf("*p++=%d\n",*p++);
    printf("++*p=%d\n",++*p);
    printf("*++p=%d\n",*++p);
}

和调试结果:

*P=10
*p++=10
++*p=21
*++p=6356748

1 个答案:

答案 0 :(得分:1)

第一个printf打印arr的第一个元素,并且不理会指针p。第二个printf再次打印第一个元素,然后在打印后递增指针p,因此现在p指向arr的第二个元素。第三个printf获取p的第二个元素,然后对其进行递增,但保持p不变。最终的printf递增p,因此它现在指向arr的末尾,然后尝试打印出该地址的内容。没有办法知道那里会发生什么。