C 的基礎知識

2021-04-13 07:21:25 字數 3534 閱讀 1619

一.請填寫bool ,float, 指標變數與 「零值」比較的if 語句。

if (n ==0)

if (n!=0)

以次類推:

請寫出bool flag與」零值」 比較的 if 語句:

if(flag)

請寫出 float x

與」零值」 比較的 if 語句:

const float espon=0.000001;

if( ( x =< espon)&& ( x >= - espon) );

請寫出char *p 與」零值」 比較的 if 語句:

if( p==null )

二.以下為windows nt 下的32位 c++程式 ,請計算 sizeof 的值。

char   str = 「hello」;

char   *p = str;

int    n = 10;

請計算sizeof (str) = 6

sizeof (p)  = 4

sizeof (n)   = 4

void fun (char str[100])

void *p = mallo(100);

//請計算

sizeof(p) = 4

三.簡答題

1. 標頭檔案中的ifndef/define/endif 幹什麼用?答:

防止該標頭檔案被重複引用.

2. #include and #include 「filename.h」有什麼區別?答:

對於#include ,

編譯器從標準庫開始查詢

filename.h 對於

#include 「filename.h」 ,

編譯器是從使用者的工作路徑開始查詢

filename.h

3. const 有什麼用途 ?(請至少說明兩種)

答: 1.

可以定義

const常量.

2.const

可以修飾函式的引數

,返回值

,甚至函式的定義體.被

const

修飾的東西都受到強制保護

,可以預防意外的變動

,能提高程式的健壯性.

4. 在c++ 程式中呼叫被c 編譯器編譯後的函式 ,為什麼要加 extern 「c」 ?

答: c++

語言支援函式過載

,c不支援函式過載

.函式被

c++編譯後在庫在的名字與

c語言不同.例如

:void foo(int a,int b);

該函式被

c編譯器編譯後在庫中為

_foo,

而c++

編譯器則會產生像

_foo_int_int

之類的名字.

c++提供了

c連線交換指定符號

extern 「c」

來解決名字匹配問題.

5. 請簡述以下兩個 for 迴圈的優缺點

//第乙個

for ( i = 0 ; i< n ; i ++)

優點: 程式簡潔

缺點:多執行了

n-1次邏輯判斷,

並且打斷了迴圈

」流水線」作業

,使得編譯器不能對迴圈進行優化處理,降低

了效率.

第二個

if (condition)

else

優點: 迴圈的效率高

缺點:程式不簡潔

四.有關記憶體的思考題

void getmemory (char * p)

void test (void)

請問執行text 函式會有什麼樣的結果?

答: 程式崩潰

因為getmemory

並不能傳遞動態記憶體,

test

函式中的

str一直是

null,

strcpy(str,」hello world」)

將使程式崩潰

void  * getmemory ( )

void test (void)

請問執行text 函式會有什麼樣的結果?

答: 可能是亂碼.

因為getmemory

返回的是指向

」棧記憶體」的

指標,該指標的位址不是

null,

但其有原先

的內容已被清除

,新內容不可知.

void getmemory(char * p , int num)

void test (void)

請問執行text 函式會有什麼樣的結果?

答: 1.

能夠輸出

hello.

2.記憶體洩漏.

void test (void)

}

請問執行text 函式會有什麼樣的結果?

答: 篡改動態記憶體區的內容

,後果難以預料,

非常危險.

因為free(str)

之後,str

成為野指標,

if(str != null)

語句不起作用.

五. 編寫strcpy 函式

已知 strcpy 函式的原形是:char strcpy (char * strdest ,const char * strsrc);

其中strdest 是目的字串,strsrc 是源字串。

(1)不呼叫c++ /c的字串庫函式,請編寫函式 strcpy

char* strcpy(char* strdest,const char* strsrc)

(2)strcpy 能把strsrc 的內容複製到 strdest,為什麼還要用 char * 型別的返回值 ?

答: 為了實現鏈式表示式.

例如:int length = strlen( strcpy( strdest,」hello world」 ) );

六.編寫類string 的建構函式` 析構函式 和賦值函式

已知類string 的原形為:

class string

;請編寫上述4個函式:

//string

的普通建構函式

string::string(const char *str)

else

} //string

析構函式

string::~string(void)

// stringr

拷貝建構函式

string:: string(const string &other)

// string

賦值函式

string operator = (const string &other)

delete m_data;

int length = strlen(other.m_data);

m_data = new char[length + 1];

strcpy(m_data,other.m_data);

return *this; }

C 的基礎知識

首先,初學c 源 是必不可少的 include 輸入輸出流ostream istream using namespace std cin,cout intmain 主函式 在介紹幾種標頭檔案 標頭檔案 c 的常用標頭檔案 好了,下面寫幾個例項程式 include using namespace st...

C 基礎知識

抽象類 abstract class 一種不可以被例項化的類。抽象類中一般含有抽象方法,當然也可有具體實現。繼承類只有實現過所有抽象類的抽象方法後才能被例項化。介面 inte ce 只含有共有抽象方法 public abstract method 的類。這些方法必須在子類中被實現。反射 程式集包含模...

c 基礎知識

或運算的意義是什麼 0 0 0 0 1 1 1 0 1 1 1 1 無進製與運算的意義是什麼 在vc中,視窗的每個屬性對應乙個只有一位為1的16位的二進位制數,當增加某屬性做或運算 即可,取消某個屬性只需與 上這個屬性的取反。cs.style ws maximizebox 和cs.style cs....