一.請填寫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....