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”。