ps:答案是我的在學習過程當中書寫,可能存在錯漏之處,僅做參考。
做者:cosefy
Date: 2020/1/9ios
第二章:變量和基本類型函數
練習2.1:學習
練習2.2:指針
利率:double
本金:long long
付款:long doublecode
練習2.4:
對象
練習2.6:blog
int month=9,day=7;
month,day被定義爲十進制類型的整形數。ip
int month=09,day=07;
month,day被定義爲八進制類型的整形數,但month表示出錯,數字9不在八進制表示形式中。
練習2.8:input
#include<iostream> int main() { std::cout << "2\x4d\n2\t\x4d" << std::endl; return 0; }
練習2.9:編譯器
std::cout << int input_value;
錯誤緣由:輸出中不容許使用類型名;而且使用了未初始化的變量input_value。
int i = { 3.14 };
錯誤緣由:初始值存在丟失數據的風險,且使用列表初始化,則編譯器會報錯。
double salary = wage = 9999.99;
錯誤緣由:wage變量沒有先被定義。
int i = 3.14;
沒有錯誤。
練習2.10:
#include<iostream> std::string global_str; //默認初始化爲空串 int global_int; //內置類型在函數體外定義默認初始化爲0 int main() { int local_int; //內置類型在函數體內定義,將不被初始化 std::string local_str;//默認初始化爲空串 std::cout << global_str << std::endl; std::cout << global_int << std::endl; //std::cout << local_int << std::endl; std::cout << local_str << std::endl; return 0; }
運行結果:
練習2.12:
a,c,d是非法的。
練習2.13:
j的值是100
練習2.14:
程序合法。
輸出結果以下圖:
練習2.15:
b,d不合法。
練習2.16:
賦值都是合法的,但會發出從double型到int型數據可能會丟失數據的警告。
練習2.17:
運行結果:
練習2.18:
#include<iostream> int main() { int a = 10, * p = &a; *p = 20; std::cout << *p << std::endl; p = 0; std::cout << p << std::endl; return 0; }
練習2.19:
引用自己不是對象,引用綁定了對象就沒法再更改;指針自己就是對象,而且能夠指向新的對象。
練習2.20:
指針p1指向變量i,而後修改p1指向的對象的值,值修改成原對象值的平方。
練習2.21:
#include<iostream> int main() { int i = 0; double* dp1 = &i; //非法,int類型的對象不能初始化double類型的指針 int* dp2 = i; //非法,表示形式錯誤。 int* dp3 = &i; //合法 return 0; }
練習2.22:
if(p) //指p的值是否爲0
if(* p) //判斷指針p指向的對象的值是否爲0
練習2.24:
void是一種特殊的指針類型,能夠存聽任意類型的對象。
練習2.25:
(a) int * p,i,&r=i;
ip是int型指針,未指向對象;i是int型數據,未初始化;r是i的int型引用。
(b) int i,* ip=0;
i是int型數據,未初始化;ip是int型指針,是個空指針。
(c) int * ip,ip2;
ip,ip2都是int型指針,未指向對象,
練習2.27:
練習2.28:
練習2.29:
練習2.30:
p2底層const,p3頂層const。
練習2.36:
#include<iostream> int main() { int a = 3, b = 4; decltype(a) c = a; //c是int型 decltype((b)) d = a; //d是int引用 ++c; ++d; std::cout << c<<std::endl; std::cout << d << std::endl; return 0; }
c=4,d=4。
練習2.37:
c是int型,d是int&。 結果:a=4,b=4,c=3,d=4。