c++16进制整型输出一个指针是怎么回事

来源:百度知道 编辑:UC知道 时间:2024/05/30 15:06:31
看到了一道关于c++的题,是这样的:
main()
{
int a[]={1,2,3,4,5,6,7,8,9,0},*p;
p=a;printf("%x\n",p);printf("%x\n",p+9);}
若第一个printf语句输出的是5732,则第二个printf语句的输出结果是______。答案是5749.
我想知道printf语句输出的到底是什么呢,理解不了,郁闷中。。。

因为 p指向的是整形数。所以 p+1 就等于p的值加上 sizeof(int),p+9 的值就是 p的值加上9*sizeof(int)。32位系统int 是32位,即4个字节,所以就是p的值加36,%x是以16进制形式输出,36转换成16进制为24,如果第一个输出5732,那么第二应该输出5732+24即5756。
我实际运行时,第一个输出为 12ff58 ,第二个输出为 12ff7c ,刚好 12ff7c-12ff58=24 (都是16进制)。
如果是16系统,即int占2个字节,那么应该是5732+12=5744,我想不通,什么情况下会得到5749。

你是那个%X那个格式是错误的,输出是不可预计的