【C语言笔记进阶篇】第一章:指针进阶
目录
(1)字符指针
(2)指针数组
A:什么是指针数组
B:指针数组的用法
(3)数组指针
A:什么是数组指针
B:数组指针的用法
C:关于指针和数组的再总结
(4)数组参数,指针参数
A:一维数组传参
B:二维数组传参
C:一级指针传参
D:二级指针传参
(5)函数指针
A:什么是函数指针
B:函数指针及其使用
(6)函数指针数组
A:什么是函数指针数组
B:函数指针数组
C:函数指针数组的用途
(7)指向函数指针数组的指针
(8)回调函数
A:引言
B:void指针
C:qsort函数
D:qsort函数(冒泡排序法模拟实现)
(1)字符指针
第一:一个字符
第二:一个字符数组
第三:常量字符串
关于这个常量字符串,一定要注意以下的这个问题
所以这个常量字符串感觉像是省略版的“const char* p1”
(2)指针数组
A:什么是指针数组
所谓指针数组,就是存放指针的数组,它的里面存放的全部是指针
B:指针数组的用法
指针数组的用处它能保存指针,这种用法尤其体现于数组中,因为数组名就是地址
(3)数组指针
A:什么是数组指针
数组指针,其主语就是指针。那么整形指针指向整形数据,字符指针指向字符数据,相应的数组指针也就是指向数组。前面我们说过,数组的数组名表示数组的首元素地址,而如果对数组进行“&arr”这样的操作,这表示数组的地址,那么数组的地址当然也是需要一个指针来保存的,所以我们把保存数组的地址指针叫做数组指针
关于这点,由于数组指针的加入,很多初学者在书写指针时感到很混乱
B:数组指针的用法
第一:数组指针不会使用的方法
数组指针被解引用后,就是数组名
可以看出这种写法是在让人别扭,与其这种写法,还不如使用数组名
第二:数组指针的真正用法
如下:有一个二维数组,调用函数输出它。
首先我们最常用的输出方式就是如下
而采用数组指针输出方式如下
C:关于指针和数组的再总结
以下写法均是等价
(4)数组参数,指针参数
A:一维数组传参
B:二维数组传参
C:一级指针传参
D:二级指针传参
(5)函数指针
A:什么是函数指针
数组指针是指向数组的,函数指针就是指向函数的,也就是函数也是有自己的地址的
这里要注意一点,数组的时候&数组名是数组的地址,数组名是数组首元素的地址。
而函数名和&函数名都是函数的地址
B:函数指针及其使用
函数指针的定义和数组指针基本类似
(6)函数指针数组
A:什么是函数指针数组
函数指针数组,本质是指针数组,也就是它是存放函数指针的一个数组。
B:函数指针数组
如下,有2个函数,分别表示加减乘除,他们的函数返回类型和参数类型是一致的,所以可以用一个数组保存他们的地址
C:函数指针数组的用途
函数指针数组能够很好的保存一组具有相同参数类型,相同返回值的函数的地址。它的一个经典例子就是“转移表”。比如在计算器例子中,使用switch case语句,如果使用普通方式,要增加一些其他运算时,其case语句要多次增加,显得很臃肿,而运用函数指针数组,则能避免这种情况,且在后期增加新的相同类型的运算时,在主函数内只需增加新函数地址
(7)指向函数指针数组的指针
我们说过,函数指针数组它是一个数组,数组中每个元素是函数指针。通过前面的学习我们知道指向数组的指针叫做数组指针,以此类推,既然函数指针数组是一个数组,那么指向它的指着就叫做指向函数指针数组的指针
(8)回调函数
A:引言
回调函数就是把一个函数的地址进行传参,最后通过地址来调用函数,一下是一个经典例子
前面的时候,咋们讲过冒泡排序,可以使一组整形数据排序
但是这个函数不够通用,因为在面对浮点型,结构体这种特殊数据时,就不能排序了
B:void指针
前面说过对于int数据,应该定义int*的指针,依次类推,但是不知道这个指针的类型具体是什么的时候,可以将其定义为void类型,也就是空类型
所以void指针的特点就在于此,后续讲解中也是运用到了void指针的这样一个特点。但是特别需要注意的一点是,指针类型的意义在于在进行指针移动时其具体需要移动几个字节的问题,而对于void指针不知道定义的是什么类型,所以不能进行解引用操作。
C:qsort函数
qsort函数就是快速排序,可以帮助我们解决上述的问题,比如下方int数组比较
此时,他就可以完成float数组的排序
当然他也可以完成结构体的比较
D:qsort函数(冒泡排序法模拟实现)
上一节我们讲了,qsort函数,qsort函数第四个参数需要我们自己传入一个比较函数,这个比较函数的返回值是一个大于0,或者小于0或等于0的数,qsor函数通过这样的一个参数完成具体的排序,交换的过程,其具体的方式是快速排序。但是这里通过冒泡排序,来推究到底这个qsort函数内部是如何实现的
指针更深入层次的了解请移步
【C语言重点难点精讲】C语言指针_快乐江湖的博客-CSDN博客123https://zhangxing-tech.blog.csdn.net/article/details/120842292
【C语言笔记进阶篇】第一章:指针进阶相关推荐
- java程序设计基础篇_Java语言程序设计(基础篇) 第一章
第一章 计算机.程序和Java概述 1.1 引言 什么是程序设计呢? 程序设计就是创建(或者开发)软件,软件也称为程序. 1.2 什么是计算机 计算机是存储和处理数据的电子设备,计算机包括硬件(har ...
- 第十七章 指针进阶(1)
C语言学习之路 第一章 初识C语言 第二章 变量 第三章 常量 第四章 字符串与转义字符 第五章 数组 第六章 操作符 第七章 指针 第八章 结构体 第九章 控制语句之条件语句 第十章 控制语句之循环 ...
- c语言程序第一章编程,c语言程序的设计第一章 C语言编程入门.ppt
c语言程序的设计第一章 C语言编程入门 第1章 C语言编程入门 本章是本书的入门篇,专为初学者熟悉编程过程.掌握程序结构而准备的. 本章学习目标 ? 1)? 能够通过模仿与改变来构造带有测试函数的C语 ...
- javascript进阶教程第一章案例实战
javascript进阶教程第一章案例实战 一.学习任务 通过几个案例练习回顾学过的知识 通过练习积累JS的使用技巧 二.实例 练习1:删除确认提示框 实例描述: 防止用户小心单击了"删除& ...
- javascript进阶课程--第一章--函数
javascript进阶课程--第一章--函数 学习要点 了解内存管理 掌握全局函数的使用 知识点 基本类型和引用类型 基本类型值有:undefined,NUll,Boolean,Number和Str ...
- 第二篇第一章概述及第二章生产和储存物品的火灾危险性分类 重点在于表格...
2019/1/4 [录播]2018一消精华班-实务-一级消防工程师-环球网校 http://v.edu24ol.com/?type=lesson&id=178923&gid=16157 ...
- c语言基础题库·第一章
c语言基础题库·第一章 第1章 一.填空题 下列是合法的用户标识符的是( A ). A)_w1 B)3_xy C)int D)LINE-3 2.一个C语言程序是由( B ). A)一个主程序和若干子程 ...
- 第一篇第一章燃烧的基础知识
2019/1/3 [录播]2018一消精华班-实务-一级消防工程师-环球网校 http://v.edu24ol.com/?type=lesson&id=178941&gid=16157 ...
- 【C语言笔记初级篇】第六章:指针入门
目录 (1)指针是什么 (2)指针和指针类型 A:指针类型 B:指针类型的意义 (3)野指针 A:什么是野指针 B:野指针的起因 C:如何避免野指针 (4)指针运算 A:指针+-整数 B:指针-指针 ...
- C++进阶(应用篇)——第一章 多线程编程
C++进阶语法篇将和C++进阶应用篇一起编写. 引言:本篇主讲C++进阶应用篇,分4部分:多线程编程.进程通信.网络编程.网络服务器编程,操作系统:windows10. 1.多线程编程 1.1 线程 ...
最新文章
- php写网页6,thinkphp6输出原始html内容 - 旗云号
- 不用额外变量交换两个整数的值
- 2020-11-10(安卓如何传递数据)
- Linux 命令详解(六)Linux 守护进程的启动方法
- 掘金专访 - 收藏集 - 掘金
- HTTP和HTTPS详解
- java cpu io高_服务器负载过高问题分析-不是cpu高负载也不是IO负载如何处理(阿里 几乎是必考题)...
- Mybatis知识点复习(第一次)
- 考勤系统 服务器管理,考勤管理系统ZKNet Web Server管理
- 加热垫美国站UL130测试项目及周期
- 中标麒麟的下载和安装
- 1374:铲雪车(snow)——欧拉回路
- 【DNSPOD】利用DNSPod实现动态域名解析【DDNS】
- [UE4]计算小地图比例尺
- 基于ESP32的蓝牙鼠标键盘(一)BleKeyboard.h函数解析
- 人脸识别签到考勤系统毕业设计,人脸识别考勤系统设计与实现,人脸识别系统论文毕设作品参考
- jieba-analysis java内存占用高
- 【Ansible】 Ansible 模块 setup 与 stat 模块用法
- 动环监控串口,动环监控系统接口
- 比脱发更可怕的是白头发!一种特殊的压力会使你早生华发
热门文章
- 经典面试题(30):以下代码将输出的结果是什么?
- lambda表达式 java 效率_Java8新特性效率之Lambda
- matlab复杂噪声产生实验报告,matlab加入噪声 - 范文中心
- python网络爬虫与信息提取视频_Python网络爬虫与信息提取入门5
- excel营销数据分析宝典 pdf_你见过最漂亮的 Excel 表格什么样?
- Canvas X Draw for Mac7.0.2英文版
- c语言输出各种图形主函数咋写,C语言图形函数介绍篇
- webdrive不更新_关于selenium 用Webdrive打开Firefox不含有插件的问题(python)
- linux中dpkg找不到命令_工作中常用的Linux命令介绍与实践
- python opencv 直方图均衡_详解python OpenCV学习笔记之直方图均衡化