| |
|
开发:
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++知识库]C语言——指针进阶 |
目录 🎱?🎱?前言对于以下的讲解,需要知道这里的一些知识
🐹🐹一、字符指针在指针的类型中我们知道有一种指针类型为字符指针 char* ; 一般使用:
还有一种使用方式如下:
?指针存放的是地址,指向的是字符串首个字母的地址,也就是说pstr字符指针里存的是h字母的地址。 下面有一道面试题:
运行的结果是这样的: ?为什么str1和str2是不一样的呢?因为不同的数组所用的内存空间是不一样的,也就是说指针指向的内存空间是不一样的。?C/C++?会把常量字符串存储到单独的一个内存区域,当几个指针指向同一个字符串的时候,他们实际会指向同一块内存。而str3和str4指向的就是同一个字符串常量,所以他们指向的是同一块内存空间,空间的地址是相同的,所以str3和str4是相等的。 🐹🐹二、指针数组指针数组:就是存放指针变量的数组
因为[]的优先级要高于*,在没有()的时候,arr1会优先与[]结合,所以arr1是一个数组,存放的元数是10个,存放元素的类型是int*。 同理,arr3是一个数组,存放元素的个数是5个,存放元素的类型是char**。 🐹🐹三、数组指针数组指针也是指针,数组指针就是指向数组的指针。
p1是指针数组,p2是数组指针
🐹🐹&数组名vs数组名
&arr和arr分别是什么呢? arr是数组名,也就是数组的首元素地址;而&arr是取出数组的地址 那么数组的地址和数组的首元素地址有什么不一样呢? 我们来看下面一段代码:
运行结果如下: 我们可以看到&arr和arr的数值是一样的,那两个是真的一样吗? 我们再看一段代码:
? ?我们可以看到,arr+1跳过了4个字节,也就是1个int类型元素所占的空间大小,&arr+1跳过了40个字节,也就是10个int类型元素所在的空间大小。arr+1跳过了数组的一个元素,而&arr+1跳过了整个数组。 ?学习了指针数组和数组指针我们来看下下面的代码是什么意思吧;
1.arr一个数组,元素个数是5个,元素的类型是int,叫做整形数组 2.parr1是一个数组,元素个数是10个,元素的类型是int *,叫做整形指针数组 3.parr2是一个指针,指向的类型是int(*)[10],叫做整形指针数组指针 4.parr3是一个数组,元素个数是10个,指向的类型是int(*)[5],是一个存放整形指针数组指针的数组 注:[ ]的优先级要高于*号的,所以必须加上()来保证数组名先和*结合。 🐹🐹四、函数指针函数指针,就是指向函数的指针,保存的是函数的地址。
比如说,我要创建一个指针变量parr1指向add函数 那么应该是这样的
这里有3个int,从左到右分别为1、2、3 第1个int表示的是函数add的返回类型,第2、3个表示的是add传参的类型。 那么parr1函数指针的类型就是int(*)(int,int) 我们来看下面两个比较容易混乱的代码:
该怎么简化这两段代码呢?
🐹🐹五、函数指针数组函数指针数组就是存放函数指针的数组 函数指针的类型可以是:
那么函数指针数组应该怎么写呢?
?上面三种写法,parr1是正确的 parr1 先和 [] 结合,说明 parr1是数组,数组的内容是什么呢? 是 int (*)() 类型的函数指针。 ?🐹🐹 六,指向函数指针数组的指针?指向函数指针数组的指针是一个指针 ?指针指向一个数组,数组的元数是函数指针; 虽然说看起来很复杂,但其实就是一个数组指针? ?
? ? ppfunArr是一个指针,指向一个有五个元素的数组,数组存放元素是函数指针?,类型是? ? ? ? ?void(*)(const char*)? ? ? 谢谢观看,如有帮助请给博主一键三连哦! 谢谢观看,如有帮助请给博主一键三连哦! 谢谢观看,如有帮助请给博主一键三连哦! |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/23 13:26:43- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |