C 指针 一

                                        C 指针 一
       最近有同学问我C中指针的问题,自己也是没解释好吧,语言措辞简直稀烂,毕竟语文不及格…我觉得指针这一块用例题加图来解释,或许更容易理解。文中有什么错误不当的地方,欢迎指正
指针的本质:一个有类型的地址
首先直接上一段C语言学习指针都会学习的一段程序。

#include <stdio.h>
int main()
{   //为了说明每一步的操作,分开写
     int *p;
     int a;
     a=100;
     printf("a=%d\n",a);
     p=&a;
     printf("p=%p\n",p);//%p 打印地址的格式
     printf("&a=%p\n",&a);
     *p=200;//此时*p相当于a
     printf("a=%d\n",a);
     printf("*p=%d\n",*p);
     return 0;
}

输出结果:
在这里插入图片描述

具体分析过程如下:

①初始状态,没有定义任何变量
在这里插入图片描述
②定义了变量p(可看做int *类型),分配内存空间(先不管分配的内存空间是多大)
在这里插入图片描述
③定义了变量a,分配内存空间(此时两个内存中的值是随机的,没有意义,写出来没必要)
在这里插入图片描述
④将a赋值为100,对应内存中存储的值为100,所以此时能打印出a的值为100。
在这里插入图片描述
⑤此时,指针p指向了a,保存了a的地址(注意:是保存了a的首地址!后面的文章中会写到),图中用一种指向关系来表示。所以此时能打印出p的值为变量a的首地址。
在这里插入图片描述
⑥注意:*p=200,操作指针所指向的内存!从⑤中可以看到,指针p所指向的内存是哪个?没错就是箭头指向的那块内存,所以此内存中的值由原来的100,变成了200.此时打印a的值,自然是200,打印*p的值,不是打印p的值,而是打印p所指向的内存的值,此时为200.
在这里插入图片描述

注意:

①你操作p不会影响a,操作a不会影响p,但是你操作*p就不一样了。当你操作*p时,会先找到p,p里面存放的是&a(a的首地址),即指向了a对应的内存,然后对该内存进行操作,赋值为200。

②有人一直分不清*号,指针中的*号有两层含义:
1、定义变量时,*代表类型,即指针类型
例如:int *p=&a;
2、使用变量时,代表操作指针所指向的内存
例如:*p=200;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值