也是在CSDN论坛上看到了,原题如下:
1.输出结果的a值为什么是100,而不是255?
2.下面程序为什么会崩溃?
-
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;该地址指向的内容不确定,不能随意修改,不是任何地址都可以供你访问的。
如解答有错误,还请多多指教。