热门标签 | 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 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 深入了解 Windows 窗体中的 SplitContainer 控件
    SplitContainer 控件是 Windows 窗体中的一种复合控件,由两个可调整大小的面板和一个可移动的拆分条组成。本文将详细介绍其功能、属性以及如何通过编程方式创建复杂的用户界面。 ... [详细]
  • 本文介绍了几种不同的编程方法来计算从1到n的自然数之和,包括循环、递归、面向对象以及模板元编程等技术。每种方法都有其特点和适用场景。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • CMake跨平台开发实践
    本文介绍如何使用CMake支持不同平台的代码编译。通过一个简单的示例,我们将展示如何编写CMakeLists.txt以适应Linux和Windows平台,并实现跨平台的函数调用。 ... [详细]
  • 本文介绍了如何在C#中启动一个应用程序,并通过枚举窗口来获取其主窗口句柄。当使用Process类启动程序时,我们通常只能获得进程的句柄,而主窗口句柄可能为0。因此,我们需要使用API函数和回调机制来准确获取主窗口句柄。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • dotnet 通过 Elmish.WPF 使用 F# 编写 WPF 应用
    本文来安利大家一个有趣而且强大的库,通过F#和C#混合编程编写WPF应用,可以在WPF中使用到F#强大的数据处理能力在GitHub上完全开源Elmis ... [详细]
  • 本文深入探讨了Python中的高阶函数和Lambda表达式的使用方法,结合实际案例解析其应用场景,帮助开发者更好地理解和运用这些强大的工具。 ... [详细]
  • C# LiNQ 查询 join连接
    C# LiNQ 查询 join连接 ... [详细]
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社区 版权所有