作業

1.題目:判斷ABCD四個表達式中值是否正確,若正確寫出a的值。

int a=4;

A     a+=(a++);     先計算a++,這時候a的值還是4,第二次運算時a=a+(a++)=5+4=9

B     a+=(++a);     先計算++a,這時候a的值是5,第二次運算時a=a+(++a)=5+5=10

C     (a++)+=a;    錯誤,左側不是一個有效變量,不能賦值,可改爲(++a)+=a;答案爲10

D     (++a)+=(a++); 先計算++a,a的值爲5,然後再去計算a+=(a++),即5+6=11

2.

2.Double dArray[2] = {3,9},*p,*q;

p=&dArrary[0];

q=p+1;

cout<<q-p<<(int)q-(int)p;

答案:1 8

3.Char *p =(char*)malloc(100)

Memset(p,1,100);

Strcpy(p,”hello”);

Char str[]=”hello”;

Cout<<sizeof(p)<<strlen(p)<<sizeof(str)<<strlen(str);

答案:4 5 6 5

4..typedef struct s* TPS 與define DPS struct s* 哪個好?爲什麼?

這兩種情況都的意圖都是要定義dPS和tPS作爲一個指向結構體s指針,typedef更好。

因爲:DPS P1,P2;  Tps P3,P4;

第一個擴展爲struct s* P1,P2;定義P1爲一個指向結構的指針,P2爲一個實際的結構;

第二個擴展爲struct s* P3,struct s* P4;正確定義了P3,P4兩個指針

5.myStruct *ptr;

 myStruct myArray[10];

 ptr=myArray;

下列哪個指向數組的第二個元素

A ++ ptr;

B ptr= ptr+sizeof(myArray);    

C ptr= ptr+sizeof(myStruct);

D ptr= ptr+sizeof(str);

選擇A ,B應該爲ptr= ptr+10/sizeof(myArray)

6.

2.char str[] = "abcde中國";

 cout << sizeof(str)<<endl;

答案:10,1個漢字佔2個字節

7..Fun(int a)

{ Assert(a>=0);

}

Fun(int a)

{ Assert(a++>=0);

}

分析:Assert宏的原型定義在<assert.h>中,其作用是如果它的條件返回錯誤,則終止程序。

使用Assert的缺點:頻繁調用會極大影響程序性能,增加額外的開銷。

用法總結與注意事項:

(1) 在函數開始處檢查傳入參數的合法性;

(2) 每個Assert只檢查一個條件,因爲同時檢查多個條件時,如果斷言失敗,無法直觀的判斷是哪個條件失敗;

(3) 不能使用改變環境的語句,因爲Assert只在Debug下生效,如果這麼做,會使程序正在運行時遇到問題。

錯誤:Assert(i++ <100)這是因爲如果出錯,比如執行前i=100,那麼條件語句就不執行,那麼i++這條命令就沒有執行;

正確:Assert(i<100);i++

8.

Char str[]=”abc\0”

Sizeof(str);    答案:5   \0佔一個空間

har str1[]=”abc\0d\e”

Sizeof(str1);   答案:7    \0、\e各佔一個空間

?

9.1.哪些運算符不能重載

大部分的操作符是可以被重載的,例外的只有“.”、“::”、“?:”和“sizeof”。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章