| |
|
开发:
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++知识库]c/c++专题-指针概念通俗理解 |
目录 杂言? 对它简单处理,它就简单; 指针的基本概念? 指针和链表在c和c++语言是很基本的概念和功能。在其它语言也是重要的部分,只不过是退化了指针功能,封装起来进行管理用户不需要关心。 ? c语言是比较底层的语言,比汇编高级点。要能透彻的理解指针的运行原理最好能够简单了解下计算机的组成原理和主要过程,下图简单介绍了一个简单的计算程序是怎么运行的 ? ? 通过上图中可以看出来,基本上所有的数据计算都是放在内存里面。内存通过一个个地址编号进行寻址。
? ? 如下图:有几点说明?
?总结: 常见指针类型结构体指针
?p_aa_test是一个结指向aa_test的一个结构体指针,和一般的指针没有啥区别也是占一个地址,然后后面指向了一个结构体地址,这个结构体占8个字节 数组指针
? 数组指针p有3个元素,每个元素是一个指针,每个元素存的值是一个地址,其它的和一般的数组基本一样。? ?? 多维指针
? pp 是一个二维指针,是一个一维指向p的指针,p指向的a的地址,p=*pp。 三维等等都一样的理解 指针本身的运算? 指针本身的运算和一般类型运算稍微有点区别,我们知道指针事实上就是存储了一个地址,那么它的运算肯定要和地址有关系,那是什么样的关系呢,对于 一个指针 p 那么 p++ 之后 p=?多少呢
? ?如下图是上面指针 pa? pb pc pd 执行加法操作后的结果,其中pa是加了4 ? ?总结一下,上面说了指针的运算是和地址有关系的,那么加1,理论上应该要指向下一个有效地址,因为每种类型的占用的地址宽不一样,所以下一个有效地址要在原基础上加上该类型的地址宽度,那么char占用地址宽度是1?,int占用4,结构体cc占用8,一个一维指针占用4, 所以得到以上结果 参数类型? ? 参数基本分为两种类型,一种是值形参数,一种是指针参数或者叫地址参数,数组也是一种指针或者地址参数 ? 值形参数? ? ? ? ?如这个函数原型? int? func_test(int? a,? int? b); ? ? ? ? 值形参数还有一个很大的问题是性能开销, 会有值拷贝和多余的中间变量 ? 指针参数? ? ? ? 如这个函数原型? int? func_test(int? *a,? int? *b); call函数里面的a b变量和func_test里的a b变量完全是通过地址对应的,因为地址在一个变量的生命周期是不会变的,?所以在 func_test里面操作的是 a,b就是call里面的a,b地址。 这也是为啥常常在交换两个值的时候,需要传地址的原因。 ? ? 总结一下:指针参数即是地址参数,在函数各个调用过程中以地址为桥梁,建立联系。理论上这里有个个人意见,觉得c语言在开始设计之初应该只有地址传参是否更加合适呢,在性能和使用上更加贴切c的定位 总结? ? 指针就是一个变量,只不过它只是执行地址的一个变量,它自己也有存储的地方,多维指针就是取指针的地址组合而成,后面再讨论指针用法的各个场景和注意点 |
|
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图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/11 12:54:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |