这个语句令我很费解(void *)p1=(void *)p2=(void *)p3=(void *)4;! 谁能帮忙解释??不胜感激

来源:百度知道 编辑:UC知道 时间:2024/06/18 15:59:55
char *p1;int *p2;long *p3;
(void *)p1=(void *)p2=(void *)p3=(void *)4;
p1++;p2++;p3++;
求:p1,p2,p3;
问题补充:这是我今天面试遇到到的题目,原题就是上面描述的。
这个语句令我很费解(void *)p1=(void *)p2=(void *)p3=(void *)4;!
谁能帮忙解释??不胜感激

答案是:p1 = 5, p2 = 6, p3 = 8 (TURBO C 2 环境下)
解析:
本题主要是考察你对指针的掌握及各数据类型所占字节数的了解程度。
1. (void *)即是将指针指向为空,也就是可以指向任何一个类型,这样那个赋值语句才能成立。
2. (void *)4 就是地址为4,注意指针实际上也就是地址。也就是说这个地址赋给了p1, p2, p3
3.对于 char 型,p1++ 即指向下一个char,即为5,因为字符指针一次移动一个字节。
同理,对于 int 型,p2++ 即指向下一个 int ,即为6,因为整型指针一次移动两个字节。
对于 long 型,p3++ 即指向下一个long,即为8,因为long指针一次移动4个字节。

注意:上述都是在Turbo C(ANSI C,标准C)环境下运行,在VC下可能有所不同。

类型强制转换,并将P1,P2,P3全部赋值为4,
结果应该为:
4+sizeof(char);4+sizeof(int),4+sizeof(long);
即5,8,8

楼上2位基本正解,指针就是地址,不过再不同的环境中指针移动的位数是有区别的,比如int有的是2有的是4