指针有什么用(为什么要用指针 详解指针在编程中的重要性)

本文目录
为什么要用指针 详解指针在编程中的重要性
使用指针可以动态分配内存,这是一种在程序运行时根据需要分配和释放内存的方法。比如,在程序中需要动态创建一个数组,可以使用指针来分配内存。动态分配内存的好处是可以减少内存的浪费,提高程序的效率。
动态分配的内存必须在使用完后进行释放,否则会导致内存泄漏。可以使用free函数来释放动态分配的内存。
3. 实现数据结构
指针是计算机编程中非常重要的概念,可以让程序员更加灵活地操作计算机内存,从而实现更加高效的程序设计。指针的应用范围非常广泛,可以用于动态分配内存、传递参数、实现数据结构和访问硬件设备等方面。在使用指针时,需要注意指针的初始化、越界访问和释放等问题。
指针还可以用于访问硬件设备,如显卡、声卡等。在操作系统和驱动程序中,指针可以用于访问设备的寄存器和内存,从而实现对设备的操作。
为什么要使用指针指针的好处在哪里
指针使用比较灵活,如果说它的好处,根据我平时编程时的感受,大概有这么几点:
1.在数据传递时,如果数据块较大(比如说数据缓冲区或比较大的结构),这时就可以使用指针传递地址而不是实际数据,即提高传输速度,又节省大量内存。
2.数据转换,利用指针的灵活的类型转换,可以用来做数据类型转换,比较常用于通讯缓冲区的填充,比如说,一个数据缓冲区char buf为某一数值,类型为int,就可以使用如下语句进行赋值:
*(short*)&buf=cmdID;
*(short*)&buf=type;
*(int*)&buf=value;
3.字符串指针,是使用最方便,且常用的。
4.函数指针,形如:#define PMYFUN (void*)(int,int),可以用在大量分支处理的实例当中,如某通讯根据不同的命令号执行不同类型的命令,则可以建立一个函数指针数组,进行散转。
5.在数据结构中,链表、树、图等大量的应用都离不开指针。
指针究竟有什么用
别的话不想多说,说多了你也不理解,用什么语言不重要,只有经验累积到一定程度你才会有体会,任何技术的存在都有其历史渊源,指针最大的好处两点
1,大数据传递,只要传递地址就等于传递N多数据,速度快
2,传递函数地址,实现回调,事件调用(这个对于设计模式非常有用)
回调函数,建议去了解下windows的消息机制,回调函数是多任务的基础,细节就不展开了。函数地址的传递是个非常有用的技术,可以实现很多灵活的操作,没有一定工作经验是无法体会的。
举个极其简单例子吧,有一个int的数组,要遍历所有元素查找最大值,要写一个循环,循环中编写比较大小的代码,比如 if (a》b){max=a.....},最后返回最大值,这个没有问题。现在我要增加一种算法,求最小值,那么你必须另外写个函数,同样的循环体,不同的地方就是循环内的代码不同,要改成 if (a《b){min=a.....},诸如此类的算法很多,当你的业务中有大量的循环处理时,你会发现需要编写N多的函数,其中除了函数名称和循环体内算法不一样外,函数构成几乎一模一样. 另一方面,如果我要遍历的不是int类型数组呢?那岂不要写N多的重载函数?
一个有思(tou)想(lan)的程序员绝对不可接受这样的情况出现.
如何缩减代码量,可不可以将不同的核心处理代码单独打包定义,而我只要编写一个包含循环体的遍历函数就可以了呢?而我只需要定义打包各类不同的算法,当我需要时把其中算法代码的地址传递给循环函数,不就可以了吗?更进一步,如果函数或者核心处理代码能够接受和设别不同类型元素的数组,那岂不是非常完美了?
因此能够传递函数地址的需求就出现了,其实回调函数,事件响应都是这个机制,函数指针的意义是当编译前无法确定处理方式时,或者如何处理数据的决定权不在循环内时,就需要事件回调函数或事件触发机制来完成,而这些机制的基础就是函数指针.
所以指针的意义可不是简单的操作一个变量那么简单,它的影响意义相当深远,以我的知识面所知,为实现多态以至于工厂模式建立的基础.
PS:不要认为VB C#没有指针,如果没有VB就无法实现回调和事件响应. 也不要认为操作内存没用,那是你还不需要用到.
顺便截一段代码片段,我日常工作需要VBA遍历数据表的遍历器的循环部分,就用到了事件触发和处理单元挂接的机制.
再补充一下C#的委托,其实委托也是利用的指针,只不过C#中隐藏了,换了个名称:委托.本质是一样的.C#中存在大量的泛型类,其实就是实现了一个接口多种调用的需求,所谓泛型类就是一个变量或者一个函数接口可以存储传递不同的数据类型,而不像int这种基础类型只能存储整数类型,如此一来减少了很多代码量,当然代价就是性能.
比如list类型,它是个泛型数组类,封装了很多方法/函数,其中find方法就是前面我上面提到的需求,find只提供循环遍历,查找的匹配条件需要另外给出,如此一来C#无需提供N多的重载函数,增加了灵活性减少的代码量,由于FIND的工作就是查找,因此参数很简单,要求匹配函数返回bool值,指示循环是否结束.
FIND的参数就是个函数委托/指针,FIND内部有个循环从索引0开始遍历所有元素,取得元素之后就会调用proc,而proc就是程序员提供的匹配代码,要求返回bool.如果为true则循环结束返回找到的对象.注意list的元素可以是任何对象实例.
C#实现了很多程序员的需求,而vb中则因为是早期的语言,只能自己编写遍历器,但是只要你理解这些需求或思想,完全可以实现相同的功能.
学习编程最重要的是学习思想而不是代码,语言和代码真的不重要,它们只是用来实现你思想的工具.码这么多字,只是想说明一点,你以为不需要不应该存在的东西一直存在着,只是因为语言的更新封装了变形了更方便了. 此例中proc就是个指针而且是函数指针,C#中声明一个委托就是声明指针,只是称呼不一样,调用或者代码形式不一样.
指针的作用
在计算机科学中,指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,所以地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。在高级语言中,指针有效地取代了在低级语言,如汇编语言与机器码,直接使用通用暂存器的地方,但它可能只适用于合法地址之中。

更多文章:
食肉菌是什么引起的(食肉杆菌是什么它一般是通过什么方式侵入人体的)
2025年8月5日 08:15
另我空间complex汉化版下载(请问ntrpg2游戏手机汉化版)
2026年4月8日 20:15
switch什么时候出的(任天堂新款Switch什么时候发售)
2025年11月11日 10:30
前端怎么打断点调试debugger(android debugger 调试怎么用)
2025年7月19日 00:30
completely change(希望能彻底改变自己 别再跟以前那么幼稚了 尽力而为吧我! 求翻译成英文)
2026年5月5日 09:30
java中inputstream(Java中InputStream的读取方式是什么)
2026年9月12日 11:30
用于删除数据的sql语句是(SQL语句中删除表中数据的语句是)
2026年3月5日 01:45













