2012年3月9日C++学习笔记

1. unsigned buf_size = 1024;

    int ia[buf_size];// 错误。buf_size 是一个变量,不能用于定义数组的维数(维长度)。

2.下列数组的值是什么? 

    string sa[10]; 
   int ia[10]; 
   int main()

  { 
    string   sa2[10]; 
    int   ia2[10]; 
   } 

sa 和 sa2 为元素类型为 string 的数组,自动调用 string 类的默认构造函数将各元素初始化为空字符串;ia 为在函数体外定义的内置数组,各元素初始化为0;ia2 为在函数体内定义的内置数组,各元素未初始化,其值不确定。 

3. 

(a) int ia[7] = {0, 1, 1, 2, 3, 5, 8}; //正确
(b) vector<int> ivec = {0, 1, 1, 2, 3, 5, 8}; 
(c) int ia2[] = ia; 
(d) int ia3[] = ivec; 
 
(b)错误。vector 对象不能用这种方式进行初始化。 
(c)错误。不能用一个数组来初始化另一个数组。 
(d)错误。不能用 vector 对象来初始化数组。

4. 如何初始化数组的一部分或全部元素? 
定义数组时可使用初始化列表(用花括号括住的一组以逗号分隔的元素初值)来初始化数组的部分或全部元素。如果是初始化全部元素,可以省略定义数组时方括号中给出的数组维数值。

如果指定了数组维数,则初始化列表提供的元素个数不能超过维数值。如果数组维数大于列出的元素初值个数,则只初始化前面的数组元素,剩下的其他元素,若是内置类型则初始化为 0,若是类类型则调用该类的默认构造函数进行初始化。

字符数组既可以用一组由花括号括起来、逗号隔开的字符字面值进行初始化,也可以用一个字符串字面值进行初
始化。 

5.  列出使用数组而不是 vector 的缺点。 
与 vector 类型相比,数组具有如下缺点:数组的长度是固定的,而且数组不提供获取其容量大小的 size 操作,也不提供自动添加元素的 push_back 操作。因此,程序员无法在程序运行时知道一个给定数组的长度,而且如果需要更改数组的长度,程序员只能创建一个更大的新数组,然后把原数组的所有元素复制到新数组的存储空间中去。与使用 vector 类型的程序相比,使用内置数组的程序更容易出错且难以调试。

6.  在用下标访问元素时,vector使用vector::size_type作为下标额类型,而数组下标的正确类型则是SIZE_T。

7. 解释指针和引用的主要区别。  
    使用引用(reference)和指针(pointer)都可间接访问另一个值,但它们之间存在两个重要区别:

(1)引用总是指向某个确定对象(事实上,引用就是该对象的别名),定义引用时没有进行初始化会出现编译错误;(2)赋值行为上存在差异:给引用赋值修改的是该引用所关联的对象的值,而不是使该引用与另一个对象关联。引用一经初始化,就始终指向同一个特定对象。给指针赋值修改的是指针对象本身,也就是使该指针指向另一对象,指针在不同时刻可指向不同的对象(只要保证类型匹配)。

8.

(b) const int ic; 
(c) const int *pic; 
(d) int *const cpi; 
(e) const int *const cpic; 


(b) 非法:定义 const 对象时必须进行初始化,但 ic 没有初始化。 
(c) 合法:定义了指向 int 型 const 对象的指针 pic。 
(d) 非法:因为 cpi 被定义为指向 int 型对象的 const 指针,但该指针没有初始化。 
(e) 非法:因为 cpic 被定义为指向 int 型 const 对象的 const 指针,但该指针没有初始化。 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值