C++中指针与数组的详解

数组:

(1)静态数组的维数必须是大于等于1的常量表达式;

(2)在定义静态数组时,如果初始化列表列出元素的一部分,那么剩余元素用值初始化(内置类型被初始化为0,类类型用其默认构造函数进行初始化);如果无初始化列表,那么在函数内部定义的数组元素无初始化,在函数外部定义的数组用值初始化。

(3)静态字符数组既可以用花括号括起来的初始化列表进行初始化,还可以用字符串字面值进行赋值初始化,下述两个初始化定义结果是等价的:

char A[]={‘C’,’+’,’+’,’\0’};

char A[]=”C++”;

(4)在创建动态数组时,数组的长度是运行时确定,所以其维数可以是任意表达式,如果数组元素具有类类型,则使用该类的默认构造函数;如果数组元素是内置类型,则无初始化,如下:

string *psa=new string[10]       元素全部为空string

int *pia=new int[10]           元素无定义

也可以在数组长度后面加一对空圆括号,对其元素进行值初始化:

int *pia1= new int[10]()      元素全部为0

string *psa1=new string[10]()与string *psa=new string[10]是等价的。

指针:

(5)用一个类型标识符定义多个指针的时候,每个指针前面都要加“*”,如下:

int *a,*b;       a,b都是int型指针;

int *a,b;        a是int型指针,b是int类型

(6)指针的初始化和赋值操作可以有四种情况:

            1> 0值的常量表达式(0,const常量表    示、NULL);

            2>类型匹配的对象地址;

            3>另一个对象的下一个地址;

            4>同类型  的另一个指针。

(7)指针只能指向同类型的变量,特殊情况:

           1>指向const类型的指针可以被初始化为非const类型的地址;

           2>基类的指针可以被初始化为派生类对象的地址;

           3>void类型指针可以保存任何类型对象的地址;

(8)指针如果指向数组的情况下,也可以用下标操作,例如:

int a[3]={1,2,3};

int *p=a;

那么p[2]=3;

(9)容许计算数组超出末端的指针,可以对该指针进行算术操作,但不能进行解引用操作。

(10)C++不容许创建长度为0的静态数组,但可以动态创建长度为0的数组(malloc,new)

(11)空指针可以确保不指向任何对象或者函数,除非指针指向的对象已经存在,一般情况下不要定义无指向的指针,如果实在要定义就定义个空指针(NULL)。

(12)使用数组时,大部分情况下都转换为指向数组第一个元素的指针,但是例外情况是:数组用作取地址操作符(&)和sizeof操作符时或用数组对数组的引用初始化时,不会转换为指针。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值