近期刷題知識點
1.一個C語言程式是由()。
正確答案: B
函式組成
- 在16位C編譯系統上,下列程式執行後的輸出結果是()。
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申明為虛擬函式,所以呼叫時會去子類尋找對應的虛擬函式執行。