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

    文章

    3004

    浏览量

    73900
  • C语言
    +关注

    关注

    180

    文章

    7601

    浏览量

    136251
  • 程序
    +关注

    关注

    116

    文章

    3778

    浏览量

    80861
  • 函数
    +关注

    关注

    3

    文章

    4308

    浏览量

    62445
  • 指针
    +关注

    关注

    1

    文章

    480

    浏览量

    70513
收藏 人收藏

    评论

    相关推荐

    C语言基础知识科普

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

    C语言指针知识科普

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

    C语言指针讲解,赶快收藏!

    指针对于C来说太重要。然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本
    发表于 11-15 10:15 737次阅读

    C语言入门教程-指针

    指针C语言中,指针被广泛使用。所以要想完整地掌握C语言,您需要对
    发表于 07-29 11:30 659次阅读

    C语言指针电子教程

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

    C语言指针函数和函数指针详细介绍

    C语言指针函数和函数指针详细介绍。。。。。。。
    发表于 03-04 15:27 5次下载

    c语言函数指针定义,指针函数和函数指针的区别

     往往,我们一提到指针函数和函数指针的时候,就有很多人弄不懂。下面就由小编详细为大家介绍C语言中函数指针
    发表于 11-16 15:18 3619次阅读

    C语言的精髓——指针详解

    C语言的精髓——指针详解
    发表于 11-30 14:43 17次下载

    基于C语言中指针的基本用法解析

    C语言中其它的知识都学得可以,唯独指针搞不懂。如果是这样,我可以很负责的告诉你,对于这门编程语言,你等于是没学。所以学好
    的头像 发表于 01-09 15:12 4777次阅读

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

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

    指针才是C语言的精髓

    文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言指针对于很多初学C语言的人来说是一个十分复杂比较抽象的知识,今天就带大家一起来揭开
    发表于 12-09 13:06 14次下载
    <b class='flag-5'>指针</b>才是<b class='flag-5'>C</b><b class='flag-5'>语言</b>的精髓

    C语言-内联函数、递归函数、指针函数

    这篇文章介绍C语言的内联函数、递归函数、函数指针指针函数、局部地址、const关键字、extern关键字等知识点;这些
    的头像 发表于 08-14 10:03 1662次阅读

    C语言进阶】C语言指针的高阶用法

    C语言进阶】C语言指针的高阶用法
    的头像 发表于 08-31 13:24 2285次阅读

    C语言中的悬空指针和野指针是什么意思?

    提起C语言大部分开发者很自然就会想到指针二字,没错,作为C的核心和灵魂,它的地位咱们就不再赘述了,今天我们想跟大家讲的是指针中的两个特有名词
    的头像 发表于 02-09 17:20 1070次阅读

    详解C语言指针底层基本原理

    说到指针,估计还是有很多小伙伴都还是云里雾里的,有点“知其然,而不知其所以然”。但是,不得不说,学了指针C语言才能算是入门了。指针
    的头像 发表于 04-06 10:43 1217次阅读