【C++】指针1

指针运算

【1】赋值运算
指针变量在使用之前必须有确定的指向。
NULL是一个指针常量,表示空地址。当指针变量暂时无法确定其指向或暂时不用时,可以将它指向空地址,以保证程序的正常运行。

【2】间接引用运算
符号*也称为间接引用运算符,其运算结果为该指针所指对象的值。

【3】算术运算
指针加上或减去一个整数n,表示指针从当前位置向后或向前移动n*sizeof<数据类型>大小的地址空间。

【4】两指针相减
a:当两个指针指向同一数组时,两个指针的相减才有意义。
b:两个指针相减的结果是一个整数,表示两个指针之间数组元素的个数。
`int a[10];
int* p1=&a[1]; //p1指向a[1]
int* p2=&a[6]; //p2指向a[6]
int b=p2-p1; // b=5

【5】比较运算

pf1==pf2        //表示pf1和pf2指向同一数组元素;
pf1>pf2     //表示pf1处于高地址位置;
pf1<pf2     //表示pf1处于低地址位置。

注意:指针变量还可以与0比较,判断指针是否为空指针。
p==0    表明p是空指针,表示它不指向任何变量。
指针变量为0和指针变量未赋值是不同的概念。

指针与数组

指针与数组的关系

1:数组名会被解释成数组首元素的指针,即首元素的地址。

int a[]={12,22,32,42,52,62,72,82,92,102}; 
int *pa=a; //指针变量p指向数组a的首地址 

2:p[i]和*(p+i)这两种形式是等价的,都表示访问数组的第i+1个元素。

指针与多维数组的关系

C++允许把一个二维数组分解为多个一维数组来处理。

int iarr[3][4];
    int *pi = iarr[0];
    for(int i=0;i<3;i++,pi+=4)
    {
        for(int j=0;j<4;j++)
            pi[j] = i*j;    
    }
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<4;j++)
            cout<<iarr[i][j]<<endl;
    }
    system(“pause”);

int (*p)[4];
它表示p是一个指针变量,它指向二维数组a 或指向第一个一维数组a[0],其值等于a、a[0]、或&a[0][0]。
//表示一个指向二维数组的指针变量,该二维数组的列数为4
int *p[4];
//表示p是一个指针数组,4个下标变量p[0]、p[1]、p[2]、p[3]均为指针变量。

int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
    int(*p)[4];
    int i,j;
    p=a;
    for(i=0;i<3;i++)
        for(j=0;j<4;j++) 
            cout<<*(*(p+i)+j)<<endl;
    system(“pause”);

二级指针的使用

如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。

由于指针变量直接指向变量,所以称为单级间接访问。而如果通过指向指针的指针变量来访问变量,则构成了二级或多级间接访问。

char *ps[]={ "BASIC","DBASE","C","FORTRAN","PASCAL"};
    char **pps;
    int i;
    for(i=0;i<5;i++)
    {
        pps=ps+i; 
        cout<<*pps<<endl;
    }
    system(“pause”);

常量与指针

指向常量的指针 (常量指针)

const <数据类型> *<指针变量>;

1)无法通过指针修改指向的数据;
2)可以修改指向;
3)该指针能够指向常量;

const int A=3;
int B=5;
const int *pInt=&A;
*pInt=10;           //错误,无法修改
pInt=&B;            //正确,可以改变指向

指针常量

在指针定义语句的指针名前加const,表示指针本身是常量,称为指针常量。

<数据类型> * const <指针变量>;

修饰符const与<指针变量>紧邻,说明<指针变量>不允许修改,但可以通过*<指针变量>修改指针所指向变量的值。

char strText[32]="head";
char* const strName=strText;
strName=strName+2;      //错误,无法修改指向
*strName='n';       //正确,可以修改
*(strName+2)='r';       //正确

指向const型变量的const型指针变量

const <数据类型> *const <指针变量>;
指向const型变量的const型指针变量既不可以修改<指针变量>的值,也不可以通过*<指针变量>修改指针所指向变量的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值