近期刷题知识点
1.一個(gè)C語(yǔ)言程序是由()。
正確答案: B ?
函數(shù)組成
?
void main()
{int a=-32769;printf("%8U\n",a);}
?
8U:
格式字符必須小寫(xiě),題中的”%8U”不會(huì)當(dāng)作格式控制符,而是原樣輸出,變
量a將沒(méi)有對(duì)應(yīng)的格式說(shuō)明,也不會(huì)輸出
?
?
C語(yǔ)言中%d,%o,%f,%e,%x的意義
格式說(shuō)明由“%”和格式字符組成,如%d%f等。它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。格式說(shuō)明總是由“%”字符開(kāi)始的。不同類(lèi)型的數(shù)據(jù)用不同的格式字符。?
格式字符有d,o,x,u,c,s,f,e,g等。?
如
%d整型輸出,%ld長(zhǎng)整型輸出,
%o以八進(jìn)制數(shù)形式輸出整數(shù),
%x以十六進(jìn)制數(shù)形式輸出整數(shù),
%u以十進(jìn)制數(shù)輸出unsigned型數(shù)據(jù)(無(wú)符號(hào)數(shù))。
%c用來(lái)輸出一個(gè)字符,
%s用來(lái)輸出一個(gè)字符串,
%f用來(lái)輸出實(shí)數(shù),以小數(shù)形式輸出,
%e以指數(shù)形式輸出實(shí)數(shù),
%g根據(jù)大小自動(dòng)選f格式或e格式,且不輸出無(wú)意義的零。
scanf(控制字符,地址列表)?
格式字符的含義同printf函數(shù),地址列表是由若干個(gè)地址組成的表列,可以是變量的地址,或字符串的首地址。如scanf("%d%c%s",&a,&b,str);
?
注意:
scanf輸入double時(shí)只接受le或lf,不接受f
?
程序運(yùn)行的時(shí)候,靜態(tài)成員已經(jīng)加載在內(nèi)存里面了,但是包含靜態(tài)成員的對(duì)象共享這些靜態(tài)成員,
比方說(shuō),A有一個(gè)靜態(tài)成員public static int i;那么程序運(yùn)行的時(shí)候,這個(gè)i就加載進(jìn)內(nèi)存了,A的所有對(duì)象的i變量都指向這個(gè)靜態(tài)空間的i,也就是說(shuō)創(chuàng)建對(duì)象之前,它就占空間了
?
void?func(char?*p)
{
????p=p+1;
}
int?main()
{
????char?s[]={'1','2','3','4'};
????func(s);
????printf("%c",*s);
????return?0;
}
以下程序執(zhí)行后的輸出結(jié)果為()
1:
p是一個(gè)指針,s也是一個(gè)指針,指針傳指針,還是相當(dāng)于值傳遞,函數(shù)調(diào)用時(shí)將s的內(nèi)容(即字符'1'的地址)拷貝給p,p+1不會(huì)對(duì)s產(chǎn)生任何影響
?
使用對(duì)象名調(diào)用虛函數(shù),是靜態(tài)聯(lián)編;
使用基類(lèi)指針調(diào)用虛函數(shù),是動(dòng)態(tài)聯(lián)編;
?
?
注釋:include?? ""是先從本地目錄開(kāi)始尋找,然后去尋找系統(tǒng)路徑,而Include?? <>?? 相反先從系統(tǒng)目錄,后從本地目錄,
?
typedef?struct?list_t{
struct?list_t *next;
struct?list_t *prev;
char?data[0];
}list_t;
請(qǐng)問(wèn)在32位系統(tǒng)中,sizeof(list_t)的值為??8
?
在用作定義時(shí)char[0]是空數(shù)組,是不占空間的。如果定義char[1],那么就是長(zhǎng)度為1的數(shù)組,使用char[0]則表示這唯一的數(shù)據(jù),注意差別啦
?
在C++,下列哪一個(gè)可以做為對(duì)象繼承之間的轉(zhuǎn)換
dynamic_cast
reinterpret_cast:一個(gè)指針轉(zhuǎn)化為其他類(lèi)型的指針時(shí),不做類(lèi)型檢測(cè),操作結(jié)果是一個(gè)指針指向另一個(gè)指針的值的二進(jìn)制拷貝;
static_cast:允許執(zhí)行隱式轉(zhuǎn)換和相反的轉(zhuǎn)換操作,父類(lèi)轉(zhuǎn)換為子類(lèi)是強(qiáng)制轉(zhuǎn)換Son *son=static_cast(father),而子類(lèi)轉(zhuǎn)換為父類(lèi)就是隱式轉(zhuǎn)換;
dynamic_cast:用于對(duì)象的指針和引用,當(dāng)用于多態(tài)類(lèi)型轉(zhuǎn)換時(shí),允許隱式轉(zhuǎn)換及相反的過(guò)程中,與static_cast的不同之處在于,在相反的轉(zhuǎn)換過(guò)程中,dynamic_cast會(huì)檢測(cè)操作的有效性,如果返回的不是被?請(qǐng)求的?有效完整對(duì)象,則返回null,反之返回這個(gè)有效的對(duì)象,如果是引用返回?zé)o效時(shí)則會(huì)拋出bad_cast異常;
const_cast:這個(gè)轉(zhuǎn)換操作會(huì)操縱傳遞對(duì)象的const屬性,或者設(shè)置或者移除該屬性。
?
?
若全局變量?jī)H在單個(gè)C 文件中訪問(wèn),則可以將這個(gè)變量修改為靜態(tài)全局變量,以降低模塊間的耦合度
?
?
以下代碼的運(yùn)行結(jié)果為:
class?Base {
public:
Base() {echo();}
virtual?void?echo() {printf(“Base”);}
};
??
class?Derived:public?Base {
public:
Derived() {echo();}
virtual?void?echo() {printf(“Derived”);}
};
??
int?main() {
Base* base =?new?Derived();
base->echo();
return?0;
}
?
Base
Derived
Derived
Base* base =?new?Derived();
//首先將上面的語(yǔ)句分成兩部分:
//前一部分是基類(lèi)指針指向子類(lèi)對(duì)象實(shí)現(xiàn)動(dòng)態(tài)綁定,后一部分是new了一個(gè)子類(lèi)對(duì)象;
//語(yǔ)句執(zhí)行時(shí),先執(zhí)行后一部分new Derived()這句話,它會(huì)調(diào)用Derived() {echo();}
//而執(zhí)行派生類(lèi)的構(gòu)造函數(shù)時(shí),會(huì)先去執(zhí)行基類(lèi)的構(gòu)造函數(shù),所以會(huì)調(diào)用Base() {echo();},此時(shí)不涉及到虛函數(shù)的動(dòng)態(tài)綁定,
//因?yàn)槲覀儸F(xiàn)在才執(zhí)行了后一部分,還沒(méi)有動(dòng)態(tài)綁定,所以正常調(diào)用基類(lèi)的echo()函數(shù),執(zhí)行完后返回到子類(lèi)的構(gòu)造函數(shù),執(zhí)行子類(lèi)的echo();
//然后執(zhí)行前一部分,實(shí)現(xiàn)虛函數(shù)的動(dòng)態(tài)綁定。
base->echo();
//此時(shí)考察的就是虛函數(shù)的使用了,基類(lèi)echo申明為虛函數(shù),所以調(diào)用時(shí)會(huì)去子類(lèi)尋找對(duì)應(yīng)的虛函數(shù)執(zhí)行。
?
?
總結(jié)
- 上一篇: C语言实现音乐播放器 客户端相关函数解析
- 下一篇: 近期知识点集合