C语言之指针的再次理解

                                                                                        C语言指针的一些理解

一,   再一次理解指针的缘由是在做数据结构的题目的时候无意中的这次程序的调试,见下图,程序运行没有问题,无意之下进行了调试,遇见了这个问题。(expression cannot be evaluated无法计算表达式的值)

(更多内容,可参阅程序员在旅途)

遇见的问题

二, 若是一下子看不出来为何,那就还是先从指针谈起吧

      什么是指针呢?我的理解是指针是一个值,和普通变量没有区别,只是指针的值是一个地址,而普通变量的值是一些我们常见的类型如int,其实都是一样的。

         比如说int a,int *p,这时候你将a的地址赋给p,那你就能通过p取到a的值。

      注意,指针是有指向类型的,要时刻注意指针指向类型的内存空间大小和指针本身所占空间大小的区别,下图是个示例可以看出来区别:

指针的区别变量内存空间

三,那么既然知道了这两者有区别,下面使用malloc进行内存分配也就清楚了,看下图:(注意一下注释部分)

四, 当申请的为结构体变量时,结构体变量中又有指针时,会出现什么问题呢?看下图:

      请注意,上图并非是错误,是调试过程中,编译器显示的各个变量的情况。这里申请的内存,由两部分组成,一是a,b的内存大小,二是指向结构体的一个指针!

     请注意与下面这幅图的区别:一个申请的是结构体变量的空间,一个是指向结构体变量指针的空间:

五,那下面的这个,估计也就知道为何了:

六,不知道看完后的你收获了什么,文中有很多理解不足之处,欢迎指点,谢谢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值