指针(Pointer)

一、指针的概念

        计算机的内存中每个存储单元都是有序的,都是按字节编码,字节是最小的存储单位。在32位编译器中,内存空间的地址最多到2^{32};而64位编译器的内存中,内存空间的地址最多到2^{64}

        指针是一种数据类型,指针变量的值是另一个变量在内存中的地址。每一个变量都有一个名字,且在内存中占据一个内存位置(地址),可以通过变量名称操作内存上的值,也可以通过地址间接操作内存上的值。

        例如老师在提问时可以说:“李**,你来答。”或者说:“第二排第三列的那个同学答一下。”

        想得到地址,需要使用取地址符号(&)间接得到变量的地址,我们平时使用scanf时就会用到这个变量,将其放在变量之前即可生效

        图1中讲解了32位编译器与64位编译器指针的相关信息。

图1 - 32位编译器与64位编译器指针相关信息

         图2是指针的相关存储信息。 

图2 指针的存储信息

        指针的定义方式:

type *poniter-name;//类型 * 指针名称

        例如:

int *ip;    //整型指针
double *dp; //双精度浮点型指针
float *fp;  //浮点型指针
char *ch;   //字符型指针

二、指针初始化方法

1.声明并出示话指针变量

double num=3;
double *NUM;//定义指向double型变量的指针NUM
NUM=#   //把变量num的地址赋给指针NUM

2.声明空指针(重要‼️)

int *p=NULL;

        这里,NULL是空,即0。在定义指针的时候如果不一开始就赋值的话,建议赋空,避免出错。

三、指针的相关操作

        下面是指针的一些操作。

输出指针指向的地址中变量的值

cout<<*p<<endl;

        使用cout输出即可,但是注意*。

指针的赋值方法

p1=p2;

         这样的赋值后,p1和p2指向同样的地址,对p2的任何更改都会影响p1的值。

指针的运算方法

合法指针运算不合法指针运算
指针与整数相加指针与其他变量相乘
指针与整数相减指针与其他变量相除
指针自增两指针相乘
指针自减两指针相除
同类型指针间的比较两指针相加
同类型指针间的相减

(1)指针与整数的加减

        指针与证书相加减,表示指针在内存空间中向下或向上 移动整数个单位。int型每次移动4位,double型每次移动8位。

        例如:假设p指向地址0x1000,则

        p++        0x1004

        p+3        0x100C

(2)同类型指针间的比较

        C++自带了6中比较方法

        >大于

        <小于

        >=大于等于

        <=小于等于

        ==等于

        !=不等于

        例如:设指针p1=0x12345678,p2=0x12345679,则p1<p2。 

指向结构体的指针与符号

        请看下面代码

struct st1{
    int a;
}s1=(st1){1};
struct st2{
    int a;
    str1 *p1;
}s2=(st2){2,&s1};
int main(){
    st2 *p2=&s2;
    cout<<p2->p1->a;
}

        这其中,->用于指向结构体的指针,表示结构体内的元素。

        区分一下下面的代码

int a=5;
while(a --> 1)//下降
{
    cout<<a<<" ";
}
/*
输出:4 3 2 1
第2行看起来像是一个大箭头,实际上是(a--) > 1,是一个判断句。
*/

        这段代码非常适合坑萌新(呵呵)。一定要看准->和-->。


以上就是本文的全部内容啦,感谢阅读!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值