sizeof和指针地址的两道面试题

来源:互联网 发布:java powerbuilder 编辑:程序博客网 时间:2024/06/05 08:40

也是在CSDN论坛上看到了,原题如下:

     

1.输出结果的a值为什么是100,而不是255?
C/C++ code
char a=100;int i=sizeof(a=(a+155));printf("%d,%d\n",i,a);//输出结果的a值为什么是100,而不是255?


2.下面程序为什么会崩溃?
C/C++ code
struct S{ int i; int *p;};int main(){ S s;int *p=&s.i;p[0]=4;p[1]=3;s.p=p;s.p[1]=1;s.p[0]=2;//程序为什么会在此处崩溃?return 0;}


下面是我对答案的一些解答吧:

1  sizeof是运算符而不是函数,它看到a是char型就知道结果,所以不会去计算a的值。

2  这题的答案我也不能确定,只是看到一个个人感觉对的答案。

int *p=&s.i;
p[0]=4;
p[1]=3;
s.p=p;//等价于s.p=&s.i;
s.p[1]=1;//s.p[1]==*(s.p+1)==*(&s.i+1)==>*(&s.p)=1;也即s.p=1;
s.p[0]=2;//s.p[0]==*(s.p); s.p[0]=2等价于*(s.p)=2;也即*(0x00000001)=2;该地址指向的内容不确定,不能随意修改,不是任何地址都可以供你访问的。


如解答有错误,还请多多指教。




原创粉丝点击