C语言什么是指针? 什么是指针变量?

一、问题

        指针是 C 语⾔中的⼀个重要概念,也是 C 语⾔中的⼀个重要特⾊。它的身影在整个 C 语⾔体系中都会出现,⽽且其概念也⼗分复杂,需要多加注意和思考。

二、解答

        为了更好地弄清指针的概念,这⾥不得不先提到地址以及数据在内存中的存储和读取⽅式。

        如果在程序中定义了⼀个变量,在对程序进⾏编译的时候,系统就会给这个变量分配内存单元,但是这个单元的⼤⼩根据定义变量的类型不同⽽不同。

        衡量内存单元⼤⼩的单位是字节,⽽内存中的每个字节都有⼀个编号,这个编号就是地址。类似于现实⽣活中的旅馆,字节就相当于每个房间,字节编号就相当于旅馆的房间编号,那么客⼈就相当于存取的数据。对于内存地址的模拟如图 1 所示。

        图 1 中的 1000、1002 等就是内存单元的地址,⽽ 0、1 就是内存单元的内容。换种说法就是基本整型变量i在内存中的地址从1000 开始,因为基本整型占两个字节,所以变量 j 在内存中的起始地址从 1002 开始,变量 i 的内容是0。

        那么指针又是什么呢?这⾥仅将指针看作是内存中的⼀个地址。多数情况下,这个地址是内存中另⼀个变量的位置。如图 2 所示。

        在程序中定义了⼀个变量,进⾏编译时就会给这个变量在内存中分配⼀个地址,通过访问这个地址可以找到所需的变量,这个变量的地址称为该变量的“指针”。如图 2 所示,地址 1000 是变量i的指针。

        如果⼀个变量包含了另⼀个变量的地址,那么,第1个变量就可以说成是指向第2个变量。所谓“指向”就是通过地址来体现的。因为指针变量是指向⼀个变量的地址,所以将⼀个变量的地址值赋给这个指针变量后,这个指针变量就“指向”了该变量。例如,将变量i的地址存放到指针变量p中,p 就指向 i 。其关系如图 3 所示。

        如图 4 所示,在地址 2000上的这个变量指向地址 2005 上的那个变量,在地址 2000上这个变量的内容的值是 2005。同理,在地址 2001上的这个变量指向地址 2004 上的那个变量,在地址2001 上这个变量的内容的值是 2004。

三、总结

        能够正确⽽灵活地运⽤C语⾔指针是⼀个成熟C语⾔程序员的标志之⼀。C语⾔指针可以有效地表⽰复杂的数据结构,能够动态地分配内存,⽅便字符串的使⽤,更好地操作数组,完成获取多个函数运⾏结果的任务。更重要的是,可以直接处理内存单元地址等。 总之,学好指针对C语⾔程序员很重要。

相关推荐

  1. C语言什么悬空指针

    2024-04-13 19:24:02       35 阅读
  2. C语言什么指针数组?

    2024-04-13 19:24:02       9 阅读
  3. C语言什么指向函数的指针

    2024-04-13 19:24:02       13 阅读
  4. C语言 void 指针指针吗?它有什么作⽤?

    2024-04-13 19:24:02       12 阅读
  5. C/C++函数指针C#委托什么

    2024-04-13 19:24:02       8 阅读
  6. C语言什么全局变量?如何应⽤?

    2024-04-13 19:24:02       12 阅读
  7. C语言什么寄存器变量?如何实现?

    2024-04-13 19:24:02       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-13 19:24:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-13 19:24:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-13 19:24:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-13 19:24:02       20 阅读

热门阅读

  1. 海南注册科技公司难不难?怎么注册?

    2024-04-13 19:24:02       15 阅读
  2. Lambda表达式

    2024-04-13 19:24:02       16 阅读
  3. MySQL优化常见面试题

    2024-04-13 19:24:02       12 阅读
  4. 深入理解负载均衡:原理及常用算法

    2024-04-13 19:24:02       16 阅读
  5. 富格林:摸清受害亏损陷阱安全预防

    2024-04-13 19:24:02       17 阅读
  6. DRBD双主模式自动化安装部署脚本

    2024-04-13 19:24:02       14 阅读
  7. Unity面经(自整)——C#基础

    2024-04-13 19:24:02       16 阅读
  8. C#多线程

    2024-04-13 19:24:02       12 阅读
  9. C# WinForm —— 06 常用控件

    2024-04-13 19:24:02       12 阅读
  10. symfony框架

    2024-04-13 19:24:02       13 阅读
  11. Docker之数据卷和Dockerfile

    2024-04-13 19:24:02       17 阅读
  12. C#实现HTTP上传文件的方法

    2024-04-13 19:24:02       19 阅读