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