c语言指针理解,代码实现

  • 普通的语句 
int a = 1;

内存中地址为&a的地方存储了值1。

由于一般(无指针)语句不需要知道地址&a,也并不会使用到,所以对开发者“不可见”。在编程时,看起来就像是变量a等于1,操作变量a,就可以实现对该值的改变(实际上是在操作地址&a的值,而开发者看到变量a始终对应地址&a的值)。

  • 数组
int is[] = {1, 2, 3, 4, 5};

数组存放在内存地址&is~&(is+4),每个地址存储了一个值。

is与&is都对应数组的起始地址,两者相等,称之为指针,指向数组第一个数据。

对于指针可以通过*is取到数组第一个值1,同理*(is+1)取到2……

这样编写较为麻烦,可以(语法糖)简写 *is: is[0],*(is+1):is[1]……

  • 指针
int* p = is;

指针通过int*定义,is为数组起始地址,那么指针p指向数组。

*p访问到is[0],p[0]也访问到is[0];*(p+1)、p[1]访问到is[1]……


当我们想通过地址来操纵数据时才需要指针,指针p代表内存中地址,*p则是该内存地址中存储的值。

对于指针p,*p就相当于普通变量a/b。


代码:

    int a = 1;
    int b = 10;
    cout<<"a = "<<a<<" &a = "<< &a;
    cout<<"\nb = "<<b<<" &b = "<< &b;

    int is[] = {1, 2, 3, 4, 5};
    cout<<"\nis = "<<is<<" &is="<<&is << " *is="<<*is;
    cout<<"\nis[0] = "<<is[0] <<" &is[0] = "<<&is[0];
    cout<<"\nis[1] = "<<is[1] <<" &is[1] = "<<&is[1];

    int* p = is; // type of is : int*
    //int m = is; //error: invalid conversion from ‘int*’ to ‘int’
    cout<<"\n*p = "<<*p<<" p="<<p<< " p[0]="<<p[0]<<endl;

输出:

a = 1 &a = 0x7fff8cb86110
b = 10 &b = 0x7fff8cb86114
is = 0x7fff8cb86120 &is=0x7fff8cb86120 *is=1
is[0] = 1 &is[0] = 0x7fff8cb86120
is[1] = 2 &is[1] = 0x7fff8cb86124

*p = 1 p=0x7fff8cb86120 p[0]=1



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值