標籤:style blog color 使用 資料 ar div amp
2.1
int,long long ,short 可表示範圍和佔用記憶體空間不同。具體與電腦有關。
無符號類型只能表示0和正數,帶符號類型可以表示負數,0,正數。
float是單精確度,一般佔用4個位元組,double是雙精確度,一般佔用8個位元組,它們可表示的資料範圍也不相同。
2.2
利率用double,本金和付款用int
2.3
unsigned u=10,u2=42; cout<<u2-u<<endl; cout<<u-u2<<endl; int i=10,i2=42; cout<<i2-i<<endl; cout<<i-i2<<endl; cout<<i-u<<endl; cout<<u-i<<endl;
輸出
32
4294967264
32
-32
0
0
但凡unsigned類型涉及負數運算都會出現意外的情況(具體查詢整數在電腦內的表示方法),比如上面第2個。int與unsigned計算會將int轉化為unsigned。
2.4
略
2.5
(a)。
‘a‘ 是單字元字面值,char
L‘a‘是寬字元字面值,wchar_t
"a"是字串字面值
L"a"寬字元型字串字面值
wchar_t佔16位,char佔8位
(b)。
10是int字面值
10u是unsigned字面值
10L是long字面值
10LL是longlong字面值
012是八進位,等於十進位下的10
0xC是十六進位,等於十進位下的12
(c)。
3.14浮點數字面值
3.14f是float字面值
3.14L是longdouble字面值
(d)。
10是int字面值
10u是unsigned字面值
10.浮點數字面值
10e-2浮點數字面值,等於0.01
2.6
上面一行定義的是十進位整型,下面一行定義的是八進位整型,因此int month=09的寫法是錯的。
2.7
(1)字串常量
cout<<"Who goes with F\145rgus?\012";
輸出Who goes with Fergus?
其中\145是‘e‘,\012是’\n‘
(2)longdouble常量
(3)float常量
(4)longdouble常量
2.8略
2.9
cin>>int inpu_value;//error:不能在讀入的時候定義,只能讀已經定義好的變數 int i={3.14};//雖然編譯通過,但是給了一warning,因為損失了精度!可能與編譯器有關,有的可能會報錯。 double salary=wage=9999.99;//errer:wage未定義,不能連續定義! int j=3.14;//正確,雖然也損失了精度,但沒有提示
2.10
local_int初值未知
global_int初值為0
global_str和local_str初值為空白
2.11
(a)錯誤,既有extern又有初始值
(b)定義
(c)聲明
2.12
(a)非法,double是c++關鍵字
(c)-不能出現在變數名中
2.13
j等於100
因為局部變數i隱藏了全域變數i
2.14
輸出100 45。
2.15
(a)正確,發生隱式轉化double轉int
(b)錯。普通引用不能綁定常量,而且資料類型也不符。
(c)正確
(d)錯,引用未初始化。
2.16
(a)合法,double賦給double
(b)合法,int隱式轉化成double
(c)合法,double隱式轉化成int
(d)合法,double隱式轉化成int
2.17
輸出10 10.
因為ri是i的引用,改了i的值
2.18略
2.19
指標是對象,它指向的也是一個對象。
而引用不是對象,它綁定一個對象,是對象的一個別名,定義時必須初始化。
很多區別。。。
2.20
第一行:定義變數i=42
第二行:定義int指標指向i
第三行:通過指標修改i,使其等於42*42
2.21
(a)指向double的指標不能指向int變數
(b)錯誤。等號右側缺少&。
(c)正確
2.22
如果p不是null 指標。。
如果p指向的對象非空。。
2.23
在不用智能指標的前提下,定義的時候指標要初始化,釋放記憶體後指標要置NULL。這樣就可以通過檢查指標是否為NULL來判斷是否指向合法對象了。
2.24
void*p是一種特殊的指標類型,可以存放任意對象的地址。
*lp是指向long的指標而i是int,資料類型不符。
2.25
(a)ip是野指標,i的值是隨機的,r綁定i。
(b)i的值是隨機的,ip是null 指標
(c)ip是野指標,ip2是int資料類型,值是隨機的
2.26
(a)錯,const變數必須初始化
(b)正確
(c)正確
(d)錯。sz是指向常量對象的引用,不能修改對象的內容。
2.27
(a)&r=0,錯誤,普通引用不能綁定常量
(f)錯誤,不存在常量引用,而且也沒用初始化
2.28
(a)不合法,*const需要初始化。
(b)不合法,*const需要初始化。
(c)不合法,ic是常量需要初始化。
(d)不合法,常量指標需要初始化
(e)不合法,常量指標對象初始化。
2.29
這裡要注意const修飾的是資料類型還是聲明符。
如*、&(類型修飾符)都只是聲明符的一部分,不屬於資料類型的部分。類型修飾符不作用於本次定義的全部變數,只作用於修飾的變數。
(a)合法,常量可以拷貝給非常量
(b)不合法,p3有底層const,不能賦給p1
(c)不合法,ic是常量,而p1是普通指標,不能指向它
(d)不合法,p3是常量指標,不能再指向其他對象
(e)不合法,p2是常量指標,不能再修改它指向的地址
(f)不合法,ic是常量,不能修改
2.30
const int v2=0;//頂層const int v1=v2; int *p=&v1,&r1=v1; const int *p2=&v2,*const p3=&v1,&r2=v2; //p2是底層const,p3是頂層、底層const,r2底層const
2.31
(1)。合法
(2)。p1=p2不合法,p2具有底層const不能賦給p1;p2=p1,合法,沒有const的指標可以賦給有底層const的指標
(3)。p1=p3不合法,p3具有底層const;p2=p3合法,兩個指標都有底層const
2.32
不合法。不能將非地址的資料類型賦給指標,即使該變數值等於0也不行。
*p=NULL;
2.33
a是int,賦值合法。
b是int,賦值合法。auto會忽略頂層const而保留底層const
c是int,賦值合法。從引用中得到的是int。
d是一個int*,賦值不合法。
e是一個指向常量的指標,具有底層const,賦值不合法
g是常量int引用,賦值不合法。
auto可以從指標中得到指標變數,但是不能從引用中得到引用。所以我們可以使用auto&來定義引用。
2.34略
2.35
auto &k=10;這樣是不行的
但是const auto &k=10;就可以
j是const int。
k是指向常量對象的引用。(前面不加const效果是一樣的)
p是指向常量對象的指標
j2是常量int。
k2是指向常量對象的引用。
2.36
int a=3,b=4; decltype(a) c=a;//c是int decltype((b)) d=a;//d是a的引用 ++c; ++d; cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl
2.37
對錶達式使用decltype會得到普通引用
int a=3,b=4; decltype(a) c=a;//c是int decltype((a=b)) d=a;//d是a的引用 c=5; d=10; cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
2.38
auto根據定義時的運算式決定變數類型同時初始設定變數
decltype根據運算式決定變數類型但不同時初始設定變數
等等。。