C++ primer第四章

4.1--------------------数组

4.2--------------------指针的引入

4.3--------------------C风格字符串

4.4--------------------多维数组

 

 

4.1数组

数组是由类型名,标示符,维数组成的符合数据类型。类型名指定了放在数组中元素的类型,维数指定了数组的长度。

4.1.1数组的定义和初始化

数组的维数只能是大于等于1的常亮表达式,即:整型字面值,枚举常量,初始化为整型的const对象,注意:非const常量以及要到运行阶段才知道其值的const对象都不能用于定义数组的维数

函数外定义数组,元素为0;

函数内定义数组,元素无初始化;

显式初始化不需要指定数组的维数值,编译器会自动确定。

若元素是类类型,调用默认的构造函数初始化,如果没有默认构造函数,需要显示初始化

测试用例:

classTest

{

 

};

class Po

{

private:

int p;

int o;

public:

Po(int _p, int _o): p(_p), o(_o){}

 

};

intmain()

{

Test a[10];

 

Po b[3];//error

Po b[3] = { Po(1, 1), Po(1, 1), Po(1, 1) };//显式提供初始化

}

如果使用默认的形参,则ok

class Po

{

private:

int p;

int o;

public:

Po(int _p=0, int _o=0): p(_p), o(_o){}

 

};

intmain()

{

Po b[3];

}

 

使用字符串字面值初始化字符数组时要记得添加空字符(ascii码为0'\0',NULL)

如果数组长度小于字面字符串+1,编译器报错;

不允许数组的复制和赋值

与vector不同,数组不能初始化另外一个数组,也不能将数组赋值给另外一个数组

4.1.2数组操作,数组使用下标操作,检查下标是否越界是一个良好的习惯,可以防止缓冲区溢出(Buffer overflow)错误

 

4.2指针的引入

指针是指向某中类型对象的复合数据类型,用于数组的迭代器:指向数组中的某一个元素。

4.2.1指针的定义与初始化

指针声明语句,是从右向左阅读。注意string *p1,p2;

避免 string* p1;多使用string *p1;这是个建议:将符号紧贴着指针变量名。

指针的三个状态:特定对象的地址(同类型对象地址),某个对象后面另外一个对象,还有0(NULL),在编译时可获得0值的整型const对象或者字面值0;

int zero = 0 ;int *pi = zero;//error

避免使用未赋值的指针,会导致运行是崩溃。

4.2.3指针操作

给指针赋值   vs   通过指针进行赋值

测试用例:

intival1=1024,ival2=2048;

int *pi = &ival,*p2 = &ival2;

pi = pi2;//pi nowpoints to ival2;

指针和引用的比较

int&r1=ival,&r2=ival2;

r1=ival2;//assignival2 to ival

上面比较了指针和引用的区别:引用在定义的时候就需要初始化;引用和指针的赋值行为是有差别的(给引用赋值修改的是引用所关联的对象的值,而不是像指针那样去关联另外一个对象)。

 

4.2.4使用指针访问数组元素

在表达式中使用数组名时,该名字会自动转换为指向数组第一个元素的指针;这种情况下,指针和数组名可以认为两者相等价

4.2.5指针和const限定符

指向const对象的指针,一般情况下我们可以使用指针来修改对象的值。但是如果指针指向了const对象,C++要求指向const对象的指针必须具有const特性;constdouble *cptr;

*cptr = 21.3;//错误,*cptr might be const

 

const对象  不能赋给   指向非const对象的指针

非const对象  可以赋给   指向const对象的指针

注解:不能使用指向const对象的指针修改基础对象,然而如果该指针指向了一个非const对象,可以通过指向非const的指针指向这个基础对象,进而用指向非const指针去修改这个对象,只不过没有使用指向const对象的指针修改那个对象罢了。

注意:不能保证指向const的指针所指向的对象的值一定不能被修改,上面注解就是修改对象的值的一个办法

const指针:不能将指针指向其他对象

指向const对象的const指针:不能通过指针修改指针指向的对象,也不能让指针指向其他对象。

 

typedef 与指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值