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

也是在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;该地址指向的内容不确定,不能随意修改,不是任何地址都可以供你访问的。


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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值