0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言指针知识科普

CHANBAEK 来源:落木青云 作者:一颗糯米 2023-04-08 11:28 次阅读

指针,初学者的梦魇

对于初学者,在学习C语言的过程中每每提到指针都会让无数人闻风散胆吧。 因为在我们学C语言的时候很多人(包括学长或老师)可能都会告诉我们指针是C语言中最难的一部分,所以导致还没开始接触就劝退了一批人。 确实,C语言的精华也在于此,这也是它之所以长盛不衰的原因。 很多时候初学者之所以害怕使用指针是因为害怕去尝试,其实如果在初学阶段愿意去尝试,敢于去修改bug,这时你就会发现指针学起来也简单多了。 你是不是因为害怕搞混*(p+1)*p+1,const int *pint *const p,**p,&p 等看起来就让人蒙圈的变量、符号,并且怎么记都似乎记不住? 那就应该多去练习! 在之前的内容中我也一直没有写这部分知识点,因为我自己觉得指针只要去使用它确实是没难度的,另外一个原因是,这种没难度似乎又只可意会不可言传,自己总结出来的话总是没有书籍中写的清晰,每个人基础不一样同样的话对不同人理解的程度又不同,所以这里还是希望初学者自己主动把这块硬骨头啃下去,我就提点我自己认证之内的技巧供大家参考。

从定义出发去理解指针

这里对于指针的官方定义我就不做搬运了,所有讲解C语言的书本都少不了对指针的定义。 如果需要权威的说明可以查看《C Primer Plus》这本经典书籍,其中还包含很多细节说明和举例应用,把它作为参考书再好不过了,我想我能描述出来的文字绝对比不上他书中写的专业详细。 指针最简单的概念就是:它是程序运行过程中的一个内存地址。 至于一些针对指针变量衍生出来的奇奇怪怪的的表达式实质上就是运算符优先级与结合规律的基础内容。 如果区分不出来可以先复习运算符部分知识。 我们都知道所有程序要跑起来都需要先加载到内存中,程序运行所需的数据都会根据程序指令进行动态分配。 很多朋友平时可能会说,哎呀,我的电脑手机)又卡死啦,这时候很大可能性就是你的电脑或手机内存被占满了,而不是硬盘(存储器)没有足够空间。 当然如果你的磁盘空间不够,然后运行内存也消耗过多那活该你的机器被卡。

学习时该怎么样避免踩坑

还是哪句话,多练习把坑踩平自然而就不会再踩坑了,这肯定是一句废话,学啥技术都可以这么说。 我的建议就是善用编译器的调试功能printf()函数,现在的编译器功能都是越来越完善的,在初学阶段使用程序调试功能可以让你少走很多弯路,结合打断点调试程序,单步执行,观察变量信息,哪里对点哪里,调多了你编程都会越来越有手感。 当然,等你有一定经验之后,在项目开发过程中还是希望你不要过多的依赖调试功能。 希望你对程序能够熟练到通过看代码就能发现逻辑是否正确。 至于初学者嘛,此时不用你还想啥时候用呢! 另外一个很关键的的技巧就是多打印信息,当然也是要你到处都打印,一个变量都不落下的打印,如果你不想时不时的调试代码,那就选择这种方式,选择在关键的地方对关键的数据进行输出,这样你直接在控制或者串口助手中就能及时发现问题。 当然采用这种方式在开发阶段还是比较实用的,如果在巧妙的结合一些宏定义语句进入功能调试的差不多之后就整体关闭输出就好了,即使日后出现bug需要再调试处理起来也是非常方便。 所以以上两种方法用于练习指针操作对初学者来说也是再好不过了,总之我曾经就是这么练习的。

Keil中怎么了解指针

Keil和常用的C语言编译器VS一样具备调试功能,所以在你不会的时候也是可以采用调试的办法仿真程序运行结果来达到学习指针的目的。 下面举一个简单的例子来说明。

随便写一个逻辑上跑得通的例子程序,编译没问题之后点击debug即可。

#include  
#include  

unsigned int var1 = 0;
unsigned int idata var2[] = {1,2,3,4};
unsigned int data var3[] = {5,6,7};
unsigned int var4[] = {8,9};
unsigned int code var5[] = {10,11,12};

unsigned int data *var6;
unsigned int *var7;
unsigned int *var8;
unsigned int *var9;
unsigned int *var10;
//unsigned int *var11;

void main(void)
{
    var1 = 100;
    var2[0] = 101;   
    var3[0] = 102;
    var4[0] = 103;
//    va5[0] = 104;//这是一条错误语句,存放于flash中的数据为只读
    
    var6 = &var1;
    var7 = &var2;
    var8 = &var3;
    var9 = &var4;
    var10 = &var5;
}

在接下来弹出的窗口中就可以查看,哪些是指针的地址,以及其对应的值,都可以看的一目了然。

图片
汇编中内存信息

这个办法学起来难度不比单纯的敲代码更有意义吗,即可以从底层了解单片机执行原理又可以了解代码的执行过程,我感觉这应该不会那么无聊吧。 单片机只是一种微型的计算机放大到开发计算机程序也是一样的道理吧。

如果底层代码理解起来有一定的难度也可以添加变量到观察窗口进行单步测试,这样也一样直观明了。

图片
变量观察窗口

当然还有很多方法进行查看指针变量的变化过程,这里只是举了一个非常简单的例子,初学者完全可以充分发挥自己的动手能力探索自己的方法。 如果有自己想法欢迎留言或私信交流。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    2767

    浏览量

    72779
  • C语言
    +关注

    关注

    180

    文章

    7534

    浏览量

    128873
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79555
  • 函数
    +关注

    关注

    3

    文章

    3911

    浏览量

    61313
  • 指针
    +关注

    关注

    1

    文章

    473

    浏览量

    70364
收藏 人收藏

    评论

    相关推荐

    C语言基础知识科普

    C语言是单片机开发中的必备基础知识,本文列举了部分STM32学习中比较常见的一些C语言基础知识
    发表于 07-21 10:58 1701次阅读

    C语言指针知识科普

    指针是C语言最重要也是最难理解的部分,它在我们平时的工作中无处不在。
    发表于 09-26 10:26 333次阅读

    一份不错的C语言指针教程

    ` 本资料是一份不错的关于C语言指针的电子教程,希望对大家有所帮助...指针简介 指针是C语言
    发表于 07-28 00:25

    不错的C语言指针教程.pdf

    不错的C语言指针教程.pdf
    发表于 08-11 00:28

    干货知识分享—C语言指针的思考

    C语言是一门使用比较广泛的高级编程语言,而指针则是C语言的精髓所在,可以说学习
    发表于 01-12 17:05

    C语言指针详解

    ];//指针的类型是 int(*)[3] (5)int*(*ptr)[4];//指针的类型是int*(*)[4] 怎么样?找出指针的类型的方法是不是很简单? 完整的C
    发表于 07-04 03:34

    【信盈达】C语言知识点的总结

    、算法说明:学习单片机C一般只需要前9个知识点即可进行产品开发,但要学习嵌入式C还需要要掌握:指针、结构体、链表、宏定义等知识点。二、单片机
    发表于 10-08 14:41

    C语言指针的高级用法

    C语言指针搞不好说实话实在是太麻烦的一个东西,而且C语言指针还是绕不过的一个坎,所以我觉得还是苦
    发表于 11-06 16:50

    什么是C语言指针变量

    C语言指针变量
    发表于 12-15 07:22

    C语言如何传递指针函数?

    C语言传递指针函数
    发表于 12-18 06:29

    c语言指针详解

    1.指针简介 指针C语言中广泛使用的一种数据类型。 运用指针编程是C
    发表于 03-26 09:51

    c语言为什么要用指针

    c语言为什么要用指针C语言到底重不重要? 大学考C语言
    发表于 07-20 08:04

    C语言中的指针是什么?如何规避野指针

    C语言中的指针是什么?有哪几种类型?指针有何作用?如何规避野指针
    发表于 02-25 06:47

    C语言指针电子教程

    本资料是一份不错的关于C语言指针的电子教程,希望对大家有所帮助... 指针简介 指针是C语言中广泛使用的一种数据类型。 运用
    发表于 07-30 16:00 77次下载

    为什么C语言要引入指针_引入指针的好处是什么

    让你知道什么是 C语言 指针,为什么用指针,从此不在害怕指针
    的头像 发表于 07-28 10:12 2.2w次阅读