C++Primer第五版習題解答---第二章

C++Primer第五版習題解答---第二章

ps:答案是我的在學習過程當中書寫,可能存在錯漏之處,僅做參考。
做者:cosefy
Date: 2020/1/9ios

第二章:變量和基本類型函數

練習2.1:學習

  • 類型int,long,long long和short的主要區別是所佔據的比特數不一樣。
  • 無符號數的全部比特都用來表示數據,只能夠表示非負數;有符號數能夠表示負數,8比特signed int 的表示區間是-128~12。
  • double比float類型精度更高,通常雙精度浮點數和單精度浮點數的計算代價相差無幾。

練習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:

  • 非法,r的int型引用須要是一個對象
  • 合法
  • 合法
  • 合法
  • 合法
  • 非法,r2須要指定明確的值
  • 合法

練習2.28:

  • 非法,常量指針cp須要指定初始化的值
  • 非法,常量指針p2須要指定初始化的值
  • 非法,整型常量ic須要初始化
  • 非法,常量指針p3未初始化
  • 非法,指向常量的指針p未初始化

練習2.29:

  • 合法
  • 合法
  • 非法,ic是常量數據,p1不是常量定義的
  • 非法,ic是底層const,p3是頂層const
  • 非法,p2是頂層const,p2的值不可改變
  • 非法,ic是整型常量,不可改變

練習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。

相關文章
相關標籤/搜索