c语言-指针(1)

 //指针

    //内存中的每个数据  都有一个编号,找个编号叫做内存地址.

    //指针就是内存地址.

    //指针是一种数据类型.

    

    //指针变量

    //存放内存地址的变量 叫做指针变量

    

    //定义  指针变量的语法

    //指针类型  变量名=;//注意值必须是地址.

    //示例:

//    int *p=NULL;

    //类型是 int *

    //变量名是 p

    // 值是nulll.null是内存地址0,即二进制的320(32位操作系统)或者640(64位操作系统).

    

    //注意区别  基本数据类型和  指针类型.

    

//    int a=10;

//    printf("%p\n",&a);// &是取地址符,主要功能,获取一个变量的地址打印地址,使用%p

//    

//    float b=3.14;

//    printf("%p\n",&b);

//    

//    p=&a;

//    printf("%p\n",p);

    

    

    //如果 p存放的是&a

    //那么 *p就是a,*p操作就是对a操作.

    //同理,如果 p存放的是&b

    //那么 *p就是b,*p操作就是对b操作.

    

    

    

    //指针变量用于存放  内存地址.

    //一个内存单元(一个字节) 对应一个内存地址.

    //一个整形数据 4个字节 ,也就意味着对应4个内存地址.

    //指针变量 存放的是哪个内存地址呢?

    //指针变量存放的是变量的首地址.

    

    

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

    //数组在内存中是一段连续的存储空间.存储空间的大小等于单个元素所占空间大小乘以元素个数.数组a所占空间就是20个字节.也就意味这回有20个内存编号.

    //数组名a本质上是一个地址,数组首地址(也是数组第一个元素的首地址).

    

    printf("%p\n",a);//a本身已经是地址,不需要加&

    

    printf("%p\n",&a[0]);

    printf("%p\n",&a[1]);

    printf("%p\n",&a[2]);

    

    

    

    int *p=a;

    

    *(p+1)=100;

    printf("*p=%d",*(p+4));

    for (int i=0; i<5; i++) {

        printf("%d ",*(p+i));

        printf("%d ",a[i]);

    }

    

    //a[0]      *(p+0)      p[0]        *(p+0)

    //a[1]      *(p+1)      p[1]        *(p+1)

    //a[2]      *(p+2)      p[2]        *(p+2)

    //a[3]      *(p+3)      p[3]        *(p+3)

    //...

    //a[i]      *(p+i)      p[i]

    //可以得出一个结论,*(p+i)对应数组下标为i的元素

    

    

    

    //数组名 代表的是 数组的首地址.简单来说 数组名是地址

    //指针变量 是存放地址的变量.   简单来说  也是地址.

    //因此 *(p+i)  可以模仿a[i],写成p[i].

    //同样 a[i]可以模仿 *(p+i)  写成 *(a+i)

    printf("\n");

    printf("%d %d %d %d",a[1],*(p+1),p[1],*(a+1));//四种形式等价

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值