1、下面的程序運行時哪里會出現錯誤:
struct S
{
int i;
int p;
};
int main()
{
S s;
int p = &s.i;
p[0] = 4;
p = 3;
s.p = p;
s.p = 1;
s.p[0] = 2;
return 0;
}
【題目解析】
這道題考的是對結構體內存使用情況的理解。在32位的操作系統中,int和指針類型的變量占用空間都是4個字節。在本題中 &s.i的值實際就是 &s的值,所以“int p = &s.i”也就相當于把p指向了結構體s的地址的起始位置。如圖1所示。
圖1
假設 &s的值為0x12300,則p的值也是0x12300,p[0]指的是從0x12300開始的連續4個字節的空間,p指的是從0x12304(注意!不是0x12301)開始的連續4個字節的空間。這樣,p[0]也就相當于s.i,p也就相當于s.p,分析到這一步,可以確定程序運行到“s.p=p;”這里不會出錯。繼續往下看。
在進行了“s.p=p;”的賦值之后,s.p指向的是s的首地址,此時s.p[0]相當于s.i,s.p相當于s.p。
下一句“s.p=1”執行過之后,此時s.p的值為1,也就是指向內存的0x00001處,隱患出現了。在執行“s.p[0]=2”的時候,實際上是向內存0x00001起始的連續四個字節寫入0x00000002,而那塊內存不屬于這個程序,會出現訪問非法內存的錯誤。
VC解析的匯編代碼如下(部分),有興趣的可以參考一下。
; 14: S s;
; 15: int p = &s.i;
00401028 lea eax,[ebp-8]
0040102B mov dword ptr [ebp-0Ch],eax
; 16: p[0] = 4;
0040102E mov ecx,dword ptr [ebp-0Ch]
00401031 mov dword ptr [ecx],4
; 17: p = 3;
00401037 mov edx,dword ptr [ebp-0Ch]
0040103A mov dword ptr [edx+4],3
; 18: s.p = p;
00401041 mov eax,dword ptr [ebp-0Ch]
00401044 mov dword ptr [ebp-4],eax
; 19: s.p = 1;
00401047 mov ecx,dword ptr [ebp-4]
0040104A mov dword ptr [ecx+4],1
; 20: s.p[0] = 2;
00401051 mov edx,dword ptr [ebp-4]
00401054 mov dword ptr [edx],2
2、ABCDEF各是一個0~9的數字,根據下面的條件確定A~F的值
ABCDEF2 = CDEFAB
CDEFAB2 = EFABCD
【題目解析】
以下答案由winion提供
ABCDEF各是一個0~9的數字,根據下面的條件確定A~F的值
ABCDEF2 = CDEFAB
CDEFAB2 = EFABCD
一看到題目,我立即就想到了1/7,它正好滿足這個數字的性質。所以答案是142857.
......
1/7=0.142857
2/7=0.285714
3/7=0.428571
4/7=0.571428
5/7=0.714285
6/7=0.857142
然后是循環,注意到沒有,都是142857這六個數字。
以下答案由大輝提供
ABCDEF2 = CDEFAB
CDEFAB2 = EFABCD
2AB = CD
2EF = 1AB
2CD+1 = EF
8AB+2 = 100+AB
AB = 14
以下答案由dawangzi16 提供
1. E>2C>4A;==>a=1or2;
2. 因為EF2=AB ,結合式子1得:(if A=2 then E=8 or 9 此時不成立) 所以 A=1; E=5;
同時得出F大于5; 此時:1BCD5F2=CD5F1B;CD5F1B2=5F1BCD;
3。因為1B2=CD 所以推出:c=3或2; 又由CD2=5F; 推出C=2 ; D>5;
此時:1B2D5F2=2D5F1B;2D5F1B2=5F1B2D;
4。因為1B2 = 2D 而且D>5,推出B<5 ;當 B=3時 D=6;B=4時D=8;
又因為5F2=1B 所以 B為偶數。 從而 B=4 ,D=8;
此時 14285F2=285F14;285F142=5F1428;
5。不難看出 F=7;
從而得解
以下答案由 xiahui 提供
令AB=x, CDEF=y;
則(10000x+y)2 = 100y+x;
19999x = 98y
28577x = 714y
故得AB=14,CDEF=2857
2020年河北新聞網兩學一做
時間:2023-09-18 07:0:242020年河北新聞網兩學一做
時間:2023-09-15 11:0:59兩學一做學習教育知
時間:2023-09-21 06:0:302020年開展兩學一做學習教
時間:2023-09-19 21:0:30