1、解釋下列宣告語句,幵指出哪些是非法的,為什麼?
(d) int* ip, ip2;
(e) const int i = 0, *p = i;
【解答】
(d)合法。定義了 int 物件 ip2 和指向 int 型物件的指標 ip。
(e)合法。定義了 const int 型物件 i 和指向 const int 型物件的指標 p,i 初始化為 0,p 初始化為 0。
2、已知一指標 p,你可以確定該指標是否指向乙個有效的物件嗎?如果可以,如何確定?如果不可以,請說明原因。
無法確定某指標是否指向乙個有效物件。因為,在 c++語言中,無法檢測指標是否未被初始化,也無法區分乙個位址是有效位址,還是由指標所分配的儲存空間中存放的不確定值的二進位制位形成的位址。
3、具有 void*型別的指標可以儲存任意型別物件的位址。
4、解釋指標和引用的主要區別。
【解答】
使用引用(reference)和指標(pointer)都可間接訪問另乙個值,但它們之間存在兩個重要區別: (1)引用總是指向某個確定物件(事實上,引用就是該物件的別名),定義引用時沒有進行初始化會出現編譯錯誤; (2) 賦值行為上存在差異:給引用賦值修改的是該引用所關聯的物件的值,而並是使該引用與另乙個物件關聯。引用一經初始化,就始終指向同乙個特定物件。給指標賦值修改的是指標物件本身,也就是使該指標指向另一物件,指標在不同時刻可指向不同癿物件(只要保證型別匹配)。
5、從標準輸入裝置讀入乙個 c 風格字串可如下實現:
const int str_size = 80;
char str[str_size];
cin >> str ;
6、使用 c 風格字串的程式需要自己管理記憶體的分配和釋放,而使用 string型別的程式由系統自動進行記憶體的分配和釋放,因此比使用c 風格字串的程式要簡短,執行速度也要快一些。
7、編寫程式從標準輸入裝置讀入字串,幵把該串存放在字元陣列中。
#include
#include
#include
using namespace std;
int main()
// 複製 len 個字元至字元陣列 result_str
strncpy(result_str, in_str.c_str(), len);
// 在末尾加上乙個空字元(null 字元)
result_str[len+1] = '\0';
return 0;
}8、用 int 型陣列初始化 vector 物件:vectorivec(int_arr, int_arr + arr_size);
9、編寫程式讀入一組 string 型別的資料,並將它們儲存在vector 中。接著,把該 vector 物件複製給乙個字元指標陣列。為 vector 中的每個元素建立乙個新的字元陣列,並把該 vector 元素的資料複製到相應的字元陣列中,最後把指向該陣列的指標插入字元指標陣列。
#include
#include
#include
using namespace std;
int main()
// 釋放各個字元陣列
for (ix =0; ix != svec.size(); ++ix)
delete parr[ix];
// 釋放字元指標陣列
delete parr ;
return 0;
}
C primer習題 第4章
習題 4.7 編寫必要的 將乙個陣列賦給另乙個陣列,然後把這段 改用 vector 實現。考慮如何將乙個 vector 賦給另乙個 vector。用陣列實現 include using namespace std intmain inta2 size for size t i 0 ii a2 i a...
C Primer 第4章 習題4 34
讀入一組string型別的資料,並將它們儲存在vector中 接著,把該vector物件複製給乙個字元指標陣列。為vector中的每個元素建立乙個新的字元陣列,並把該vector元素的資料複製到相應的字元陣列中 最後把指向該陣列的指標插入字元指標陣列 include include includeu...
C Primer 第4章 習題4 35
讀入一組string型別的資料,並將它們儲存在vector中 接著,把vector物件複製給乙個字元指標陣列 為vector中的每個元素建立乙個新的字元陣列,並把該vector元素的資料複製到相應的字元陣列中 然後把指向該陣列的指標插入字元指標陣列中 輸出建立vector物件和陣列的內容 inclu...