C/C++指针从0到99(详解)

目录

一,指针的基础理解

二,指针的基本使用

三,为什么要用指针

四,指针与数组的联系

五,指针的拓展使用

1)指针数组

2)数组指针

3)函数指针·

结构:返回类型  (*p)  (参数 1,参数 2);

实例:int (*add)(int a,int b)  =add ;(add代表加法函数,函数名就是函数的地址)

函数指针 有什么用呢,函数指针能简化很多代码量,让程序变得更加健壮,你可以思考,用一个函数指针模板只要返回值和参数相同就可以适应功能不同的函数,大量减少重复代码。

6)sizeof 和stelen 的补充


一,指针的基础理解

       在电脑中所有的数据都会被存储,我们大多数时候只需要一部分数据,那我们如何准确找到那些数据呢,这个时候就需要一些编号来找到数据,像我们身份证上的编号一样,在计算机中每个字节都有自己的编号,而指针是用来存储这些地址编号的。

二,指针的基本使用

      一级指针的结构是:(类型 ) + (* )+(名称),例如:int * pa;这个就是一个int 类型的一级指针,对其解引用可以获得指针指向空间里面的内容,二级指针则是存储一级指针的地址,例如:int * *paa =&pa;对其解引用一次可以获得一级指针的指向的内容,在解引用一次可以获得一级指针指向的内容,以此类推可以理解三级,四级指针。

三,为什么要用指针

     首先指针最广泛的用法是在函数传参的时候,众所周知,一遍数据类型在传参数时,大部分是拷贝,函数中的改变无法影响其他函数中的实参,而因为指针和其他的不一样,指针是直至本质(地址),只要将实参的地址传过去,通过形参的指针找到地址进行,操作可以避免因为拷贝导致的无法改变问题。其次,指针能对数据进行更加精准的操作,能够进行通过强制转化进行字节上的操作。指针也能简化大量的代码量,这些优点在我们日后进行使用时感觉到的。还有很多优点我就不一一列举了,大家有兴趣可以网上找资料。

四,指针与数组的联系

        数组和指针的联系可谓是千丝万缕,数组的实质就是指针,数组的名称就是第一个元素的地址,指针也能用   [ ] 这种数组的形式表示,数组也能用指针  *(arr+i)的形式表示。接下来我展示一些数组和指针的转化和对应关系

int *arr              =               int arr[ ]

int (*p)[   ]         =              int  arr[ ] [ ]

五,指针的拓展使用

1)指针数组

结构:int *p[ ]

指针数组的实质还是一个数组,它的用途可以用来存储指针,方便使用,例如

int *pa=NULL;
int *pb=NULL;
int *pc=NULL;
int *arr[]={pa,pb,pc};

2)数组指针

结构:int (*p)[ ]

数组指针的本质则是一个指针,看起来结构和指针数组相同,但是不要忘记【 】和  *  优先级不同,数组指针的  p  是先与【】结合的,而指针数组是先与  *  结合的。指针数组可以存储二维数组等多位数组的地址,并且很方便的拿出,例如:

3)函数指针·

结构:返回类型  (*p)  (参数 1,参数 2);

实例:int (*add)(int a,int b)  =add ;(add代表加法函数,函数名就是函数的地址)

函数指针 有什么用呢,函数指针能简化很多代码量,让程序变得更加健壮,你可以思考,用一个函数指针模板只要返回值和参数相同就可以适应功能不同的函数,大量减少重复代码。

6)sizeof 和stelen 的补充

说先要认识到sizeof 和 strlen 的差别,sizeof 是只看()里面的类型,不会进入内存计算,如  int,数组则是 int [  10]。而 strlen 则是进入给的地址内存,找到"\0",如何统计字节数。

如果sizeof()里面的是指针,则结果是4||8,因为编译环境不同,指针大小不同,而strlen 里面只能放地址,别人可能会非法访问

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/35711.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法的时间复杂度

算法的时间复杂度 什么是时间复杂度 时间复杂度是衡量算法执行时间随输入规模增长而增长的度量标准。它描述了算法运行时间与问题规模之间的关系,用于评估算法的效率和性能。 通常情况下,时间复杂度表示为大O符号(O)&#xff0…

K8S调度管理

调度管理 1.1 调度框架1.1.1 调度体系1.1.2 资源调度 1.2 资源调度1.2.1 节点调度1.2.2 节点亲和1.2.3 Pod亲和1.2.4 Pod反亲和1.2.5 污点&容忍度1.2.6 污点实践 1.3 流量调度1.3.1 Ingress基础1.3.2 Ingress实践1.3.3 Ingress进阶1.3.4 Ingress认证1.3.5 Ingress扩展 1.1 …

mac与pd虚拟机之间不能粘贴文字或粘贴文件

首先确保共享打开: 然后检查虚拟机的Parallels Tools是否正常 一个简单的判断方式就是,退出虚拟机全屏之后,如果能够正常进入融合模式,那么Parallels Tools可用,否则就要排查问题 检查Parallels Tools是否随系统正常启…

SELF-ATTENTION DOES NOT NEED O(n2) MEMORY

背景 主要是要解决self-attention空间复杂度的问题,因为对于gpu计算来说,内存空间非常宝贵,序列长度较长的时候会出现oom问题。 用线性时间解决self-attention问题 解决数据稳定问题 因为由于进行求和计算,容易导致浮点数超过最…

Redis【实战篇】---- 分布式锁

Redis【实战篇】---- 分布式锁 1. 基本原理和实现方式对比2. Redis分布式锁的实现核心思路3. 实现分布式锁版本一4. Redis分布式锁误删情况说明5. 解决Redis分布式锁误删问题6. 分布式锁的原子性问题7. Lua脚本解决多条命令原子性问题8. 利用Java代码调试Lua脚本改造分布式锁 1…

AIGC - Stable Diffusion WebUI 图像生成工具的环境配置

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131528224 Stable Diffusion WebUI 是一款基于深度学习的图像生成工具,根据用户的输入文本或图像,生成高质量的新图像&…

【Docker 部署Minio】

Docker 部署Minio 一、拉取Minio镜像二、配置1、创建如下目录2、创建容器并运行 三、访问 一、拉取Minio镜像 访问Docker Hub镜像站找到自己需要的Minio镜像 运行以下命令 sudo docker pull minio/minio二、配置 1、创建如下目录 mkdir -p /home/zx/minio/config mkdir -p…

k8s概念介绍

目录 一 整体架构和组件基本概念 1.1 组件 1.1.1 master节点 1.1.2 node节点 1.1.3 附加组件 二 资源和对象 2.1 资源分类 2.2 元数据资源 Horizontal Pod Autoscaler(HPA) PodTemplate LimitRange 2.3 集群资源 namespace Node ClusterRo…

Linux下GO IDE安装和配置(附快捷键)

目前,GoLand、VSCode 这些 IDE 都很优秀,但它们都是 Windows 系统下的 IDE。在 Linux 系统下我们可以选择将 Vim 配置成 Go IDE。熟练 Vim IDE 操作之后,开发效率不输 GoLand 和 VSCode。有多种方法可以配置一个 Vim IDE,这里我选…

华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(二)

系列文章目录 个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python面试专栏:《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读,一起进步!🌟🌟🌟 …

【5G PHY】5G控制资源集CORESET介绍

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

SpringBoot(六)SpringBoot项目部署到腾讯云服务器

这篇文章,可以说是干货满满。关注我的同学应该直到,之前我有几篇SpringBoot的文章,介绍了如何搭建本地服务器(没看过的同学可以系统地看下我的SpringBoot专栏,保证你会有很多的收获)。但我们那都是在本地玩…

Qt(Day2)

实现登录框中,当登录成功时,关闭登录界面,并跳转到其他界面:

前端面试题-HTML、HTTP、web综合问题(三)

26 你做的⻚⾯在哪些流览器测试过?这些浏览器的内核分别是什么? IE : trident 内核Firefox : gecko 内核Safari : webkit 内核Opera :以前是 presto 内核, Opera 现已改⽤Google - Chrome 的 Blink 内核Chrome:Blink (基于 webkit &#xf…

服务器搭建oracle,并远程连接教程

下载两个压缩包,然后上传到服务器, 软件安装09:CentOS安装Oracle - 虚拟机 - 5997CK - 欢迎您! (hezhilin.online) 这里有全部步骤,反正过了几天我也会忘记,不赘述了。 直接上拆的坑: 开启服务器端口后…

【数据结构】24王道考研笔记——串

四、串 串的定义 串(字符串)是由零个或多个字符组成的有限序列。 子串:串中任意个连续的字符组成的子序列主串:包含子串的串字符在主串中的位置:字符在串中的序号子串在主串中的位置:子串的第一个字符在…

【Spring】项目创建和使用

一、Spring 的概念 Spring : 包含众多工具方法的 IoC 容器。 Spring 的核心 :IoC (控制反转), DI (依赖注入)。 loC (Inversion of Control)翻译成中文就是 “控制反转” 的意思,控制反转一种…

python代码练习:石头剪刀布猜拳游戏

python代码练习:石头剪刀布猜拳游戏 题目结果展示源代码 题目 使用Python实现人机石头剪刀布猜拳小游戏,并且最后能够统计分数和局数 结果展示 源代码 # -*- coding: utf-8 -*- # Course : python 基础 # Time : 2023/7/2 14:21 # Author : Eden Wei …

vue筛选框封装

点击对默认查询条件之外的条件进行 增加或删除 在使用的组件或标签加入:filtrateList"filtrateList"传入条件查询数组 当前demo写在xk-page中,就以xk-page组件为例 <xk-upage :filtrateList"filtrateList" :queryArr"queryArr"></xk-…

Vue3setup的参数说明

setup的两个参数 setup包含两个参数&#xff0c;一个为props、一个为context &#xff08;均为形参&#xff09; props&#xff1a;值为对象&#xff0c;包含&#xff1a;组件外部传递过来&#xff0c;且组件内部声明接收了的属性。context&#xff1a;上下文对象 <scrip…
最新文章