指针进阶1

一,字符指针

顾名思义:字符指针指的是一种指针类型为字符指针 char*;

char*可以是一个字符也可以是一个字符串,前者很好理解,让我们看看后者;

eg:char*p="abcdef";//实际上是将首元素的地址给了p,也就是说*p存的是a的地址,不是存的全部abcdef的地址;(可以把abcdef想象成一个数组)

eg:printf(“%d”,“abcdef”【3】);打印的其实是字母d,这条语句的意思是以%d的格式打印下标为3的元素d

让我们看一道相关的的面试题:

 答案:第一个是str1 str2 are not same 第二个是str3和str4 are same(大家可以暂停一下看看是为什么呢?可以复制代码块然后到编译器执行一下,这样也有利于帮助大家理解)

解析:当创建str1【】的时候,栈开启了一块空间,当创建str2【】的时候,又开辟了一块空间,这两块空间的地址是不一样的,所以打印的是not same;当创建str3的时候,前面const修饰*p,所以是一个常量字符串无法被修改,既然无法被修改,那就不需要开辟多块空间了,str3和str4指针变量都指向这块空间,所以是are same;

想必大家都应该明白了,让我们再来想一想,如果if是&str3==&str4呢,会打印出什么结果?

这时候,str3和str4都是指针变量,如果取地址的话,就是取出了指针变量的地址,这两者的地址当然是不相同了,所以会打印are not same

二,指针数组

 那我们的指针数组如何使用呢?-------------可以用指针数组模拟一个二维数组

eg:下面的代码就是用数组指针模拟实现一个二维数组

 

让我们再来理解一下指针数组

我们在前面提到,字符数组可以找到字符串的首元素的地址,但是我们想要得到字符串,所以我们用%s的格式打印就可以得到每个数组的字符串了 

 三,数组指针

 如果p+1,那就是跳过了以1个字节大小的5个元素,即跳过5个地址

 如果p+1,那就是跳过了以4个字节为大小的10个元素,即跳过40个地址

数组指针的作用是什么呢?让我们举个例子看一下

首先,我们先回顾一下一维数组的打印:

 让我们看一下数组指针的作用:
 

大家可以对比一下,发现上图右半部分的形参用的是数组指针的形式,当 *p解引用的时候,指向的是首元素的地址,这个首元素是第1行的一维数组的地址,*(p+i)其实就是跳过4个字节的5个元素,这时,p【i】【j】就是指的是每一行中的每个元素,

 让我们看一下几个语句的含义:

 让我们看一下第四个语句的含义(图解)):

 四,一维数组传参

 

 void test2(int **arr):也是可以的,是因为在主函数中,int*arr2【20】={0}其实是传的一级指针,如果想要得到一级指针的地址,用int**类型

那当一个函数的参数为一个一级指针的时候,函数能接受什么样的参数?

五,二维数组传参:

二维数组传参要么都是指针要么都是数组,数组是二维数组(列不可以没有),指针必须得是数组指针

 那当一个函数的参数为一个二级指针的时候,函数能接受什么样的参数?

 

 我们可以发现,test(&p);test(pp);test(arr);三种方式均可以传参

五,函数指针

 让我们看一下例题:

例题1

 例题2 :

 解析:

好啦,我们的指针进阶第一部分就讲解到这里了,谢谢大家~

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

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

相关文章

【开源精选导航】GitHub-Chinese-Top-Charts:一榜在手,优质中文项目轻松找寻

各位热爱开源技术的朋友们,你们是否有过这样的困扰:面对浩瀚的GitHub海洋,想找寻那些具有高质量中文文档的优秀开源项目却无从下手?今天,我们就为大家揭晓一个宝藏般的开源项目——GitHub 中文项目集合(访问…

如何在win系统部署Apache服务并实现无公网ip远程访问

文章目录 前言1.Apache服务安装配置1.1 进入官网下载安装包1.2 Apache服务配置 2.安装cpolar内网穿透2.1 注册cpolar账号2.2 下载cpolar客户端 3. 获取远程桌面公网地址3.1 登录cpolar web ui管理界面3.2 创建公网地址 4. 固定公网地址 前言 Apache作为全球使用较高的Web服务器…

idea项目如何上传gitee

1.先创建仓库 2.从gitee上面clone下来 3.配置一下git 4.在idea里面安装Gitee插件(安装完插件重启一下) 5.将项目提交到远程仓库 git->add->✔ 完后点击↗ 在码云如何获取token? 注:没有解决,有时间在继续研究

linux kernel 内存踩踏之KASAN(一)

一、背景 linux 内核出现内存类问题时,我们常用的调试工具就是kasan,kasan有三种模式: 1. Generic KASAN (这个就是我们最常用的,1 debug byte indicate 8 bytes use state, 对标用户层 asan) 2. Softwa…

滴滴举行网约车合作伙伴大会,与174家合作伙伴共商发展

近日,滴滴在昆明举行主题为“凝心聚力,共享发展”的第四届网约车合作伙伴大会,汽车租赁公司、司机服务公司、主机厂、金融机构等174家上下游生态链合作伙伴齐聚一堂。滴滴已连续四年举办网约车合作伙伴大会,邀请合作伙伴广泛参与、…

机器学习 | 掌握 K-近邻算法 的理论实现和调优技巧

目录 初识K-近邻算法 距离度量 K值选择 kd树 数据集划分 特征预处理 莺尾花种类预测(实操) 交叉验证与网格搜索 初识K-近邻算法 K-近邻算法(K-Nearest Neighbor,KNN)是一种基本的分类和回归算法。它的基本思想是通过找出与新对象最近…

万户 ezOFFICE DocumentEdit_unite.jsp SQL注入漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…

一文速学-selenium高阶操作连接已存在浏览器

前言 不得不说selenium不仅在自动化测试作为不可或缺的工具,在数据获取方面也是十分好用,能够十分快速的见到效果,这都取决于selenium框架的足够的灵活性,甚至在一些基于web端的自动化办公都十分有效。 通过selenium连接已经存在…

[NCTF2019]Fake XML cookbook(特详解)

先试了一下弱口令,哈哈习惯了 查看页面源码发现xml function doLogin(){var username $("#username").val();var password $("#password").val();if(username "" || password ""){alert("Please enter the usern…

【三】【C++】类与对象(二)

类的六个默认成员函数 在C中,有六个默认成员函数,它们是编译器在需要的情况下自动生成的成员函数,如果你不显式地定义它们,编译器会自动提供默认实现。这些默认成员函数包括: 默认构造函数 (Default Constructor)&…

设计模式之框架源码剖析(实战+图解)

Java设计模式 1,概述 随着软件开发人员人数的增多,一些公司急需一些高端人才。作为一个高端人才,设计面向对象软件是必不可少的能力,而软件设计是需要很深的功力,设计模式就要求你必须掌握。 2,本章特色…

中国地区cetos7.9 install kubeadmin

第 1 步:禁用 SELinux(可选但推荐) 如何在 CentOS 7 上查找 SELinux 状态 sestatus另一种选择是运行以下 cat 命令: vi /etc/selinux/config SELINUXdisabled rebootcentos7 linux 安装k8s前下面操作的作用是? cat…

基于JAVA的河南软件客服系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统管理人员2.2 业务操作人员 三、系统展示四、核心代码4.1 查询客户4.2 新增客户跟进情况4.3 查询客户历史4.4 新增服务派单4.5 新增客户服务费 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的河…

day38_MySQL

今日内容 0 复习昨日 1 引言 2 数据库 3 数据库管理系统 4 MySQL 5 SQL语言 0 复习昨日 1 引言 1.1 现有的数据存储方式有哪些? Java程序存储数据(变量、对象、数组、集合),数据保存在内存中,属于瞬时状态存储。文件&…

Google Chrome 常用的几个参数

1 右键--Google Chrome--属性--目标 参数作用--disable-infobars此计算机将不会再收到 Google Chrome 更新,因为 Windows XP 和 Windows Vista 不再受支持。适用于 xp、2003 的 49.x.x.x 版本。示例1--ingore-certificate-errors忽略证书错误--disable-background-…

开源知识库:让企业低成本实现知识管理

管理和利用企业内部知识已经成为提升效率和竞争力的重要手段。而对于大多数企业,尤其是中小企业而言,如何在有限的预算下,实现高效的知识管理,仍是一项挑战。面对这一问题,开源知识库应运而生。今天,我们将…

Linux - 数据流重定向、管道符、环境变量配置文件的加载

概述 想了解Linux编程,shell脚本是绕不开的关键知识点,原计划写一个整篇来分享shell的来龙去脉,但知识点过于繁杂,先分享一下学习shell的准备工作,数据流重定向、管道符、环境变量配置文件的加载,有助于知…

jdk17新特性—— instanceof的模式匹配

目录 一、instanceof模式匹配的概述二、instanceof模式匹配代码示例2.1、jdk17之前 instanceof用法 代码示例2.2、jdk17及之后 instanceof用法 代码示例一2.3、jdk17及之后 instanceof用法 代码示例二 一、instanceof模式匹配的概述 instanceof增加了模式匹配功能,…

Vulnhub靶机:niveK

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.15) 靶机:niveK(10.0.2.41) 目标:获取靶机root权限和flag 靶机下载地址:https://download.vulnhub.com/hms/nive…

算法训练第一周考试(思维性题目)

目录 第一题.满足约束 第二题:传递信息 第三题:无线替换 第四题:环球旅行 第五题:求和游戏 第六题:大相径庭数组 总结:其实这次考试主要都是一些思维性的题集,并没有过难的东西&#xff…