C语言若有以下定义和语句

int *p,k=10; double *q,f=5.6; p=&k;q=&f; 执行语句p=(int *)q;后,*p的值是()A)一个整数 B)5 C)6 D)10====参考答案是A,求详细解释

q一开始是指向double类型的变量,然后强转为指向int类型的指针并赋值给p,虽然强转了,但是q依然指向存储double类型5.6的8个字节的内存区域的起始地址,然后p也指向这段内存,然后对p进行取值,因为p是int类型,所以*p就取得了这段内存的前面四个字节的内容,double类型的机内表示你懂的,其实*p取得的是“垃圾值”。

执行语句p=(int *)q;后,p任然是一个指向整型空间的指针变量,所以*p是一个整数。

q的空间是float型,存储是按实型存储的,和int型不同,按int读出不知道是什么,float存储格式可参考:
http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html

p = (int *)q ; // p原本是一个指向整形变量的指针,不能将q直接赋给p,但是如果指针p要取q所指地址中的数据,就必须对q中的存储数据做强制类型转换。
其实这个语句等同于:
*p = int (*q);

http://codepad.org/dpTCSXAc
输出指针。

恭喜你,参考答案终于有一个对的了。

初学者一个很大的误区就是,编程是学习正确的方法,而不是做题,更不是“找错误”特别是找错误的题目的参考答案还是错误百出的。