C语言 关于指针的程序问题

来源:百度知道 编辑:UC知道 时间:2024/05/28 15:48:50
#include<stdio.h>

void main()
{
char *p1="student",*p2;
long int *p3;
p3=(long*)p1;
p3++;
p2=(char*)p3;
printf("%s\n",p2);

}

这个程序输出ent 为什么??怎么出来的???

开始时,p1是指向s的。又因为p3是长整型,p3++相当于p3=p3+4.开始时通过p3=(long*)p1;即把p1的地址赋值给p3,此时p3的值和字符‘s'的地址在数值上一样,但是类型不同。接着p3++,即p3=p3+4(长整型占四个字节)。现在p3和字符 'e'的地址数值相同了(字符型占一个字节),但是类型不同。之后又通过p2=(char*)p3;即把p2现在的值和p3相同,但是类型就变为了char类型。所以就输出了ent.

很正常啊 p3=(long*)p1;这条程序 将p1转换为了整形 其实就是ASII
因为p3是长整形 能够完全表示出P1的ASII
但是p2=(char*)p3;将整形转换为char型是长度变短 只能得到最后一部分的ASII码

所以就变成了ent