C 專項訓練 1

2021-08-03 22:21:33 字數 3600 閱讀 7923

1、which of the following calling convention(s) support(s) support variable-length parameter(e.g. printf)?(a)

a、cdecl:c語言的預設呼叫約定,允許函式的引數的個數是不固定的

b、stdcall:c++的標準呼叫方式

c、pascal:

d、fastcall

2、求輸出結果

int a[2][2][3]= ,},,}};

int *ptr=(int *)(&a+1);

printf(「%d %d」, *(int *)(a+1), *(ptr-1));

int a[5][5];

int (*p)[4];

p = a;//當陣列名a 作為右值時,代表的是陣列首元素的首位址

問&p[4][2] - &a[4][2]的值為多少?(-4)

p是指向乙個包含4 個元素的陣列的指標。也就是說p+1表示的是指標p 向後移動了乙個「包含4 個int 型別元素的陣列」。這裡1 的單位是p 所指向的空間,即4* sizeof(int)

所以,p[4]相對於p[0]來說是向後移動了4 個「包含4 個int 型別元素的陣列」,即&p[4]=&p[0]+4*4*sizeof(int)。由於p 被初始化為&a[0],那麼&p[4][2]=&a[0][0]+ 4 * 4 * sizeof(int)+ 2 * sizeof(int)

&a[4][2]=&a[0][0]+4 * 5 * sizeof(int) + 2 * sizeof(int)

&p[4][2]&a[4][2]的值相差4 個int 型別的元素。

3、下面說法正確的是(b)

​ a、c++已有的任何運算子都可以過載

​ b、const物件只能呼叫const型別成員函式

​ c、建構函式和析構函式都可以是虛函式

​ d、函式過載返回值型別必須相同

c++中不能被過載的操作符

.(成員訪問或點操作符)

?:(三元操作符或條件操作符)

::(域操作符)

.* 和 –>*

(指向成員的指標操作符)

sizeof

(取物件大小操作符)

typeid

(物件型別操作符) b:

const用於修飾函式時,一般是const修飾類的成員函式(函式定義體),表示在函式體中成員變數不能改變;其函式形式為

int ff(void)const;const修飾函式的返回值,用於返回常量;

const修飾函式的返回值,用於返回常量.其函式形式為

const int ff(); //返回的是常量,所以必須這麼呼叫const int a=ff();

關於const函式的幾點規則:

c:建構函式不可以

d:過載的概念是:名稱相同,引數個數、次序、型別不同,因此過載對返回值沒有要求,可以相同,也可以不同,但是如果引數的個數、型別、次序都相同,名稱也相同,僅返回值不同,則無法構成過載

如:

public

inta(int i);

public

double

a(int i);//wrong

而:

public

inta(int i):

public

double

a(double i);//right

4、下面的函式哪個是系統呼叫而不是庫函式 ( read ) ?

printf、scanf、fgetc、read、print_s、scan_s

系統呼叫

系統呼叫(system call)執行在使用者空間的應用程式向作業系統核心請求某些服務的呼叫過程。是作業系統核心提供的函式,在核心態執行(kernel mode)。由於系統呼叫不考慮平台差異性,由核心直接提供,因而移植性較差

庫函式庫函式(library function)是由使用者或組織自己開發的,具有一定功能的函式集合,一般具有較好的移植性,通過庫檔案(靜態庫或動態庫)向程式設計師提供功能性呼叫。是在系統呼叫上的一層包裝,執行在使用者態(user mode),庫函式不光可以在系統呼叫的基礎上包裝,也可以在其他庫函式的基礎上包裝,提供更高階的抽象,更強大的功能。比如ogre對opengl的包裝,qt對xlib的包裝。

5、malloc函式進行記憶體分配是在什麼階段?(執行階段,也就是執行階段)

6、char * const p, char const * p, const char *p 上述三個的區別,說法錯誤的是?(ac)

​ a、char * const p; 常量指標,p的值不可以修改

​ b、char const * p;指向常量的指標,指向的常量值不可以改

​ c、const char *p;常量指標,p的值不可以改變

7、分析**

#include 

#define p_char char* //語句1//預處理階段執行的

#typedef char* char_p //語句2//編譯階段

char arr[10]="movie";

int main()

知識點:#define和#typedef

define

typedef

編譯之前的預處理過程

編譯過程

進行簡單的字串代換(原地擴充套件),不作正確性檢查,只有在編譯已被展開的源程式時才會發現可能的錯誤並報錯。例如:#define pi 3.1415g26在預處理不出錯,程式中的:area=pi*r*r會替換為`3.1415g26*r*r出錯

不是簡單替換 ,而是採用如同定義變數的方法那樣來宣告一種型別。

# define int_ptr int *

int_ptr a, b;

//相當於int

*a, b; 只是簡單的巨集替換

typedef int* int_ptr;

int_ptr a, b; //a, b 都為指向int的指標,typedef為int* 引入了乙個新的助記符

typedef int * pint ; 

#define pint int *

const pint p ;//指標常量,p不可更改,但p指向的內容可更改

const pint p ;//常量指標,p可更改,但是p指向的內容不可更改。

pint是一種指標型別 const pint p 就是把指標給鎖住了 p不可更改

而const pint p 是const

int *p 鎖的是指標p所指的物件

專項訓練之列舉

codevs3291 記數問題 2013年noip全國聯賽普及組 時間限制 1 s 空間限制 128000 kb 題目等級 gold 試計算在區間1到n的所有整數中,數字x 0 x 9 共出現了多少次?例如,在1到11中,即在1 2 3 4 5 6 7 8 9 10 11中,數字1出現了4次。輸入描...

GRE填空詞彙專項訓練

1.八字真言 一次大量,多次反覆。2.第一遍堅持楊鵬的迴圈方法,一定要把每個步驟做到,做好 如果每天時間不充裕可採用26天,每天2個list的方法。3.第一遍不要管英義 派生 同根 同義反義等項,著重記憶主詞條 中義和助記法。4.若用藍寶,則先不要管類反項,其中涉及的各種關係 如 某某關係 某某與某...

英語詞彙專項訓練

今天被考到英語的專項 1 方向詞 東 east 南 south 西 west 北 north 而後續的東南,西南,西北,東北就按照 southeast,southwest,northwest,northeast 2 季節詞彙 four seasons spring 春季 summer 夏季 autu...