2.1:
int: 2字节(现在的编译器大多和long一样的尺寸,具体可以用sizeof()关键字求得其长度)
long:4字节
long long :8字节
short:2字节
无符号:只能表示大于0的数值
有符号:可以表示负数,0,正数
float & double:(执行浮点数最好用double.事实上,对于某些机器来说,双精度运算甚至比单精度快)
2.2:
利率:double 本金: double 付款: double
2.3:当一个算数表达式中既有无符号又有int型时,那个int值就会转换为无符号数
2.4:
2.5:(a)字符,宽字符,字符串,宽字符串
语法:前缀: u unicode16字符 char16_t
U unicode32字符 char32_t
L 宽字符 wchar_t
u8 UTF-8 char
后缀:u/U unsigned f/f float
l/L long ll/LL long long
2.6: 八进制:0 十六进制:0x
2.9: a、(输入时才定义是不合法的)不正确,需在cin之前定义input_value
b、i强制类型转换成3
c、wage未定义
d、i会被强制类型转换成3
需要注意的就是类型转换的问题,还有变量使用之前需要先定义声明
2.10:
这里涉及到的就是默认初始化的问题
如果在定义变量时没有指定初值,那么变量会被默认初始化。
三条性质:1、定义在任何函数体外的变量会被初始化为0。 2、定义在函数体内部的变量不会被初始化。 3、类的对象未被初始化,则初值由类决定。
所以第一个变量是一个空字符串,第二个变量是0,第三个变量不确定,第四个变量因为在std作用域内,而std作用域内有其定义,所以是个空字符串。
2.11: 定义 定义 声明
2.12:a:非法 b:正确 c:非法 d:不能以数字开头 e:正确
2.13:100
2.14:合法,与上题类似,但不同的是:显示访问i变量会访问到全局变量上 std::cout<<i = 100 sum = 45
2.15:
a:合法;b:不合法:引用只用用对象,不能用字面值或某个表达式的计算结果绑定在一起
c:合法:d:不合法:引用定义时必须初始化
2.16:
a:合法 d的值变为3014159
b:合法 强制类型转换
c:合法 强制类型转换
d:合法 强制类型转换
2.17:
10 10
ri就是i的别名,ri = 10,i的值自然为10
2.18:
温故知新:
int i =10;int &j = i; //&符号紧随类型名出现,它是声明的一部分,j是一个引用。
int *p; //*符号紧随类型名出现,它是声明的一部分,p是一个指针。
p = &i; //&符号出现在表达式之中,是一个取地址符号。
*p = i; //*符号出现在表达式之中,是一个解引用符
int &j2 = *p; //&是声明的一部分,*是解引用符。
故:改变指针的值就是重新为指针赋值一个新的地址值即可(int *p; int a = 1,b = 2; p = &a; p = &b;(最终将p指针的值改变为b 的地址)
指针所指对象赋值:用解引符来赋值:*p = 3;
2.19:
1:指针本身就是一个对象,允许指针之间的拷贝和赋值,也可以在其生命周期指向不同的对象。而引用不行,引用不是一个对象,一旦定义引用,往后便不能再绑定其他对象
2:指针无需在定义时赋值。
2.20:
int i = 42;//定义了一个整型变量并赋初值为42;
int *p1 = &i;//定义了一个整型指针p1,并把i的地址赋值给p1;
*p1 = *p1 * *p1;//就是p1指针所指的对象i赋值为 其对象i值的平方
2.21
1:非法定义,类型不一致
2:非法定义,没有取址操作符
3:合法定义。
2.22
第一个判断的是:P指针是否为空指针
第二个判断的是:P指针所指向的对象是否为0
2.23: 不可以!!
2.24: void *是一种特殊的类型,可以存放任意对象的地址。而long *只能存放long型对象的地址
2.25:
1:ip是一个int类指针型的,i是一个int型的变量,r是一个int型的引用。
2;i是一个int型的变量,ip是一个空指针。
3:ip是一个int类型的指针,ip2是一个int类型的变量
2.26:
涉及知识点:const表示的不可改变的量!:const用在变量定义时的类型前表示该变量不可改变,注意:该变量必须初始化(可以在运行时初始化)。
a:不合法,变量未初始化。
b:合法
c:合法
d:不合法,变量sz是一个const变量,不能被改变
2.27:
(a): 不合法:引用类型的初始值必须是一个对象
(b): 合法:是一个常量指针
(c): 合法: r是一个常量的引用,与(a)不同
(d): 合法:p3是一个常量指针
(e): 合法:p1为指向常量的指着
(f): 不合法:如果是引用,就必须初始化
(g): 合法:i2是一个int型常量,常量r引用初始化为i(不许通过r修改i的值)
2.28:
(a)不合法:定义了一个整型变量i, ,常量指针cp未初始化
(b)不合法,常量指针p2未初始化
(c)合法:常量引用 ic未初始化
(d) 不合法:指向常量对象的常量指针p3未初始化
(e) 合法:指向常量的指针
2.29:
a:合法
b:不合法,const int 和 int 不是一个类型,指向常量的指针在赋值时必须类型一致
c:和b相同
d:不合法,p3是一个常量指针,不能被再次赋值
e:不合法,p2是一个常量指针,不能被再次赋值
f:不合法,ic是个常量,不能被再次赋值
2.30:
v2是顶层const;
p2,r1是底层const;
p3最左是底层,右侧是顶层const;
其他都不是const;
2.31:
知识点:顶层const的拷贝不受限制,但是底层const的拷贝的对象必须具有相同的底层const资格。一般来说:非常量可以赋值给常量,反之则不行
a:合法;
b:不合法,p1是非常量,p2是常量,不能进行赋值操作;
c:合法;
d:不合法,p3既是底层也是顶层const,所以都得考虑到;
e:合法;
2.32:
不合法:空指针:可以直接给指针字面值为0来赋为空,也可直接赋为NULL,其实NULL的值就是为0,但不能直接给指针赋一个变量, 哪怕是整型且值为0也不可