指针和数组

A,指针的定义初始化和使用

定义:

type *name; //int *p;

初始化:

type *name =  &obj //string *name = str1;

避免使用未初始化的指针,如果必须分开指针和其指向的对象,应将指针初始化为0;

初始化和赋值操作的约束

对指针的初始化只能使用一下四种类型的值

1,0值常量表达式,例如在编译时可获得0值的整型const对象或者字面值常量0

const int c_ival = 0;

int *pi = c_ival;

int *pi2 = 0;

2,类型匹配对象的地址

3,另一对象之后的下一地址

4,同一类型的另一个有效指针

使用:&引用操作符 *解引用操作符

string s("hello world");

string *sp = &s;

cout << *sp

 

B,指针和引用的比较

指针和引用都可以间接访问另一个值,但引用总是指向某个对象,引用没有初始化是错误的。对引用的修改的是该引用所关联的对象的值,而并不是使引用和另一个值相关联。引用一初始化,就始终指向同一个特定的对象。

int ival = 1024 , ival2 = 2048;

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

pi = pi2 //现在pi指向ival2了

 

int ival = 1024, ival2 = 2048;

int &ri = ival,&ri2 = ival2;

ri = ri2 // ival的值和ival2的值相等了

C:指针和数组的关系

在表达式中使用数组名是,该名字会自动转换为指向数组的第一个元素的指针

int ia[] = {0,2,4,6,8};

int *ip = ia //ip 指向 ia[0]

1,指针的算术操作

指针加上或者减去一个整型数值n等效于获得一个新的指针,该新指针指向指针原来指向的元素之后或之前的第n个元素。

int ia[] = {0,2,4,6,8};

ip = ia;

int *ip2 = ip+4; //ia[4]

int *ip3 = ip2-2; //ia[2]

int *ip4 = ip3+10 //error

ip3-ip2 //-2

2,解引用和指针算术操作之间的相互作用

int last = *(ia + 4); //ok,last equel the value of ia[4];

转载于:https://my.oschina.net/u/3400107/blog/3097183

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值