热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C语言指针的应用与价值探讨与阐述

本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。

C语言是计算机软件领域最为经典的编程语言之一,尤其在底层驱动、硬件控制等应用领域,更是C语言的价值所在,这是JAVA,C#等新兴高级语言所不具备的优势所在,通过C语言的指针操作系统内存,以及位运算控制系统的各个外部I/O端口,C语言被广泛应用到硬件系统的控制中,指针的应用是C语言的灵魂,指针实现了C语言的灵活性、可变性。以下对C语言中指针的应用与价值进行探讨与阐述。

C语言编程过程中,假设定义一个变量,编译时就为这个变量分配一定长度的内存空间。而在内存区每一个内存单元都有一个地址,用来标识内存单元,在地址所标识的单元存放数据。而正确使用指针变量,区分指针变量和指针的指向变量的含义和用法,判断变量与运算符的结合顺序来确定变量的数据类型以及指向变量或成员变量的类型。通过指针来访问数组元素和下标法数组元素的等价关系,作为函数参数的指针变量,可以改变所指向的主调函数变量的值。动态存储分配、对链表的创建以及相关操作都可以运用指针实现。

类成员的指针,类成员与外部变量相互比较,进行区分的方法就是它所在的域的不同,因为域的不同而决定了变量可以使用的范围,一个指向类的成员函数或者成员变量的指针,就要规范它的参数列表、返回类型,以及被指向变量或函数的域,所以使用类域限定如下:

classNJUPT{ staticdoublenumber=20000000; intnum; public: NJUPT():num(10){}; intget(){returnnum;}; doublegetNumber(){reuturnnumber;}}

在这里定义的成员指针为intNJUPT::*p;//指向int型成员变量int(NJUPt::*)p()//指向intf()型成员函数。

那么调用的方式为&#xff1a;cout<&#xff1b;

返回指针的函数&#xff0c;一个函数的接口是它的返回值&#xff0c;C语言可以自定义类型&#xff0c;我们使用引用作为函数的实际参数&#xff0c;或在函数的实际参数中使用指针。使用一个函数返回一个指针很容易将一个局部变量的地址传出来。例如&#xff1a;

UserType*Process(){ UserTypeut(param—list)&#xff1b; //processut&#xff1b; return&&#xff1b;ut&#xff1b;//}

变量在函数运行结束已经被销毁&#xff0c;被传出的地址实际已经不存在被释放了。所以很容易出错。另一点是在运用new的时候。易造成内存泄露。

UserType*Process(){ UserTpye*put&#61;newUserType(param—list)&#xff1b; //processput&#xff1b; returnput&#xff1b;}

在函数内部使用一个new&#xff0c;分配了一个空间传出来。这样就不会发生问题&#xff0c;只是编程过程中通常会忘记在程序的外面把借来的空间还回去而造成内存泄露&#xff0c;所以把函数的参数设定为指针或引用作为代替。

两指针变量相减&#xff1a;所得之差是两个指针所指数组元素之间相差的元素个数。实际上是两个指针值(地址)相减之差再除以该数组元素的长度(字节数)。例如pf1和pf2是指向同一浮点数组的两个指针变量&#xff0c;设pf1的值为2010H&#xff0c;pf2的值为2000H&#xff0c;而浮点数组每个元素占4个字节&#xff0c;所以pf1—pf2的结果为(2000H—2010H)/4&#61;4&#xff0c;表示pf1和pf2之间相差4个元素。两个指针变量不能进行加法运算。例如&#xff0c;pf1&#43;pf2是什么意思呢&#xff1f;毫无实际意义。

this指针的用处&#xff1a;一个对象的this指针并不是对象本身的一部分&#xff0c;不会影响sizeof(对象)的结果。this作用域是在类内部&#xff0c;当在类的非静态成员函数中访问类的非静态成员的时候&#xff0c;编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说&#xff0c;即使你没有写上this指针&#xff0c;编译器在编译的时候也是加上this的&#xff0c;它作为非静态成员函数的隐含形参&#xff0c;对各成员的访问均通过this进行。例如&#xff1a;调用date.SetMonth(9)SetMonth(&date&#xff0c;9)&#xff0c;this帮助完成了这一转换.

以上是学习指针过程中个人总结出来的观点和方法&#xff0c;希望初学C语言或对指针有迷惑的人给予帮助&#xff0c;以便更好的学好指针、掌握C语言的精髓。



推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 本文提供了使用Java实现Bellman-Ford算法解决POJ 3259问题的代码示例,详细解释了如何通过该算法检测负权环来判断时间旅行的可能性。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文探讨了如何在编程中正确处理包含空数组的 JSON 对象,提供了详细的代码示例和解决方案。 ... [详细]
  • 汇编语言等号伪指令解析:探究其陡峭的学习曲线
    汇编语言以其独特的特性和复杂的语法结构,一直被认为是编程领域中学习难度较高的语言之一。本文将探讨汇编语言中的等号伪指令及其对初学者带来的挑战,并结合社区反馈分析其学习曲线。 ... [详细]
author-avatar
一个不起眼的小人物
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有