最终*ptr的值应该是多少?
开始以为是索引为5的字母的ASCII码,但实际上机验证后发现出入很大,输出了32767这个奇怪的数字
经过排查发现问题应该是出在int *ptr=(int *)a; 这里,将char类型的指针强制转换为int类型指针,在执行ptr+=5; 时,并不是加上sizeof(char)5个字节,而是sizeof(int)5个字节,于是最终ptr是指向了a[20],这是一个未定义的值,稍微修改代码,再次测试 可以看到ptr确实是指向了a[20],而a[20]是一个未定义的值,所以导致前后两次ptr的值不同
在测试*ptr值得过程中,曾经对int *ptr=(int *)a; 直接输出,但发现结果很是费解 以字符格式输出确实是Y,但以int格式输出怎么会出现1601531737这样奇怪得数字,按理说不应该是Y的ASCII码89吗,经过排查,发现问题应该还是出现在int *ptr=(int )a; int是4字节的,而char是1字节的,将int型数据以char格式输出应该会发生数据截断,可能截断后的二进制码刚好对应Y,那也许这个奇怪的数字是Y和其它东西组成的,初步推断可能是a[0],a[1],a[2],a[3],由a[0]的0101 1001,a[1]的0110 1111,a[2]的0111 0101,a[3]的0101 1111共同组成的二进制码为0101 1001 0110 1111 0111 0101 0101 1111,转换为十进制为1,500,476,767,稍加修改代码再次测试 输出的结果跟我推测的差距很大,有点想不通,于是将1,601,531,737转为二进制,为0101 1111 0111 0101 0110 1111 0101 1001,对应的是0101 1111的a[3],0111 0101的a[2],0110 1111的a[1],0101 1001的a[0],导致与我预想的顺序相反的原因应该是系统大小端的储存方式造成的,所以在我电脑上ptr的值是a[23],a[22],a[21],a[20]的组合,这是一个未定义的值。

