IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C指针(三年没下雨版) -> 正文阅读

[数据结构与算法]C指针(三年没下雨版)

C指针(三年没下雨版)

目录索引

一.指针是什么

二.指针的作用

三.闲话少叙

1.指针基本形式

2.指针和数组

3.指针和指向指针的指针(二维指针)

4.函数指针和指针函数

四.文终

五.本文参考

一.指针是什么

????????指针和函数是C语言灵魂。

?????????什么是指针,内存地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。指针描述了数据在内存中的位置,标示了一个占据存储空间的实体,在这一段空间起始位置的相对距离值。在 C/C++语言中,指针一般被认为是指针变量,指针变量的内容存储的是其指向的对象的首地址,指向的对象可以是变量(指针变量也是变量),数组,函数等占据存储空间的实体。

?????? 很干涩,基本没接触过读起来会无感,下面我们细细来分析一下,相信会有很大收获。

二.指针的作用

????????复杂的数据结构,系统地动态分配内存、消息机制、任务调度、灵活矩阵定时都离不开指针,MCU应用中,大一点的项目,需要功能模块化,硬件驱动层和应用层分别独立运行。代码移植性非常强,是离不开指针的。

三.闲话少叙

?????? 1.指针基本形式

????????先来看一张图片,这里地址不是具体的就是一个例子。最简单的指针就是下面的过程,我们所看到的数据都有他自己的地址和值,指针也拥有自己的地址,只不过他的数据部分存放的是指针。

????????一般情况下我们使用一个指针的流程是给他定义,int*b,给他指向的地址空间,b=&a,这里我们需要提前将指针指向的空间开辟出来,可以是如下情况先有int a存在,那么它自然会有一个分配好的地址,来让指针指,如果想实现键盘输入的话,我们需要用malloc来动态开辟输入空间。反正,无论如何,指针不能是一个无指向的指针。现在我们先来了解数据在程序里面就初始化好的情况。???

上一段代码和执行结果,结果很明显。

2.指针和数组

????????数组和指针关系是极为密切的,很多课本将二者割裂开来,这是对理解是有很大阻碍的。在开始上操作之前先明确一个指针数组与数组指针的区别。这个基本面试不说一半,也有1/4会问。指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身的大小决定,每一个元素都是一个指针,在32 位系统下任何类型的指针永远是占4 个字节。它是“储存指针的数组”的简称。数组指针:首先它是一个指针,它指向一个数组。在32 位系统下任何类型的指针永远是占4 个字节,至于它指向的数组占多少字节,不知道,具体要看数组大小。它是“指向数组的指针”的简称。

????????做个选择题,哪个是指针数组呢A)int *p1[10]; B)int (*p2)[10];这里需要明白一个符号之间的优先级问题。“[]”的优先级比“*”要高。p1 先与“[]”结合,构成一个数组的定义,数组名为p1,int *修饰的是数组的内容,即数组的每个元素。那现在我们清楚,这是一个数组,其包含10 个指向int 类型数据的指针,即指针数组。至于p2 就更好理解了,在这里“()”的优先级比“[]”高,“*”号和p2 构成一个指针的定义,指针变量名为p2,int 修饰的是数组的内容,即数组的每个元素。数组在这里并没有名字,是个匿名数组。那现在我们清楚p2 是一个指针,它指向一个包含10 个int 类型数据的数组,即数组指针。

????????继续上图。

????????然后开始正题,从数组指针开始。

????????然后是操作,一样的定义char Test[3]={}, char *a, a=Test。然后取了一些地址和一些值。总之无论何时一定要记得给指针一个明确的指向。

????????继续,我们看一下什么是指针数组。这里的地址都是一个假设替代,真实的地址还是要去看具体运行的结果。

????????然后是程序和运行结果。同样的定义类型,确定指向。值得一提的是,假如这个情况下,想从键盘中输入字符串中的内容,我们如果将字符串赋值为空会发生指针无指向,数据越界的情况。

????????那么为了防止越界,指针无定向的情况出现,我们需要malloc来开辟一些地址给我们键盘输入的数据。下面来操作演示一下程序和操作结果。

????????这些数组和指针的操作其实还有很多很多,但是都是大同小异,只有掌握核心原则,以一推三没问题,包括还有二维指针的应用。

3.指针和指向指针的指针(二维指针)

????????编译器在编译的时,会为指针变量和双重指针变量分配一个存储空间。这里是指针最让人迷惑的原因就是他本身放的是地址,然后本身也是拥有一个地址,不管几维指针只要记住,他本身有地址,他放的地址,就会有一个分析的准则线。

????????下面来一个具体的程序和运行结果再感受一下。开始还是初始化,定位置,帮助指针找好位置,所有涉及指针的操作第一步反应都应该它指到哪里了。

????????下面还是程序加执行结果来看一下。

4.函数指针和指针函数

????????谈到这个问题,一样的肯定还是函数指针和指针函数比较应用一下。先来看指针函数。指针函数指,针函数的本质是一个函数,其返回值是一个指针。示例如下:int *pfun(int, int);由于“ * ”的优先级低于“()”的优先级,因而pfun首先和后面的“()”结合,也就意味着,pfun是一个函数。即:int *(pfun(int, int));接着再和前面的“*”结合,说明这个函数的返回值是一个指针。由于前面还有一个int,也就是说,pfun是一个返回值为整型指针的函数。

????????函数指针其本质是一个指针变量,该指针变量指向一个函数。C程序在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。函数指针示例:func 是一个函数名,那么func与&func都表示的是函数的入口地址。同样的,在函数的调用中可以使用:方式一:func(),也可以使用方式二:(*fun)()。这两种调用方式是等价的,只是我们平时大多都习惯用方式一的调用方法。至于为什么func与&func的含义相同:对于函数func来说,函数的名称就是函数代码区的常量,对它取地址(&func)可以得到函数代码区的地址,同时,fun本身也可以视为函数代码区的地址。因此,函数名称和对其取地址其含义是相同的。函数指针示例程序如下。

四.文终

????????本文尽于此,但指针的应用远不止这些,结构体的加入,链表的参与,熟悉只能从不断的编程,学习,项目,学习,编程反反复复。指针可以说是c的灵魂,愿每一个在面对它的你的灵魂可以与其早日会晤。Be be be patient。

五.本文参考

????????少部分例程有重复,感谢各位大佬的文章与分享,侵权删。

c语言指针用法及实际应用详解,通俗易懂超详细! - 知乎 (zhihu.com)

数组指针和指针数组的区别 - 知乎 (zhihu.com)

指针函数,函数指针,有点懵圈了?你能分清楚吗 - 知乎 (zhihu.com)

?????? ?????? ????????????????????

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 19:19:22  更:2022-06-29 19:22:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 9:15:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计