指针 (五)

news2024/9/21 11:49:49

一 . 字符指针变量

在指针的类型中,有一种是字符指针:char * ,用法如下:

下面我们通过一道试题来加深理解:

看着这个运行结果,是不是跟自己心中预想的答案有一些出入呢?下面为诸君解读一下:

在这段代码中,str3 和 str4 指向的是同一个常量字符串。我们C语言(或者C++)中,会把常量字符串储存到单独的一个内存区域中,当这里的几个指针指向同一个字符串的时候,他们实际上就是指向了同一块内存。但是当我们用相同的常量字符串去初始化不同数组的时候就会开辟出不同的内存块,因此 str1 和 str 2不同,str3 和 str4 相同

二 . 数组指针变量

之前我们学习了指针数组,指针数组是一种数组,数组中存放的是指针(地址)

那么我们的数组指针变量是指针变量还是数组呢?答案是——指针变量

我们之前了解到过的:

整型指针变量:int * print 存放的是整型变量的地址,是能够指向整形数据的指针

浮点型指针变量:float * pf 存放的是浮点型变量的地址,是能够指向浮点型数据的指针

由此可得:数组指针变量应该是存放的数组的地址,是能够指向数组的指针变量

我们可以先试着思考一下:以下代码哪一个是数组指针变量?

答案应该是第二个,数组指针变量的正确格式如下:

我们的 p 会先和 * 结合,说明 p 是一个指针变量,然后指针指向的是一个大小为 10 的整形数组。p 是一个指针,指向一个数组,这就是我们数组指针的定义

三 . 数组指针变量的初始化

既然我们了解了数组指针变量是用来放地址的,那我们怎样才能获得数组的地址呢?这里就要运用我们之前学过的一个知识点:取地址符号——&,通过&数组名就可以获得数组的地址(也就是数组首元素的地址)

我们通过调试可以看到,&arr 和 p 的类型是一模一样的,都是 int [ 10 ] *,如图:

通过数组指针类型的解析,我们可以更简单的看懂其构造含义:

四 . 二维数组传参的本质

了解了数组指针,我们就可以来深入了解二维数组传参的本质了

二维数组一般的传参格式:

这里的实参是二维数组,形参也是二维数组。那么我们有没有其他的写法呢?

当然是有的,我们将二维数组看做是每个元素是一维数组的数组,也就是二维数组的每个元素都是一个一维数组,那么二维数组的首元素就是第一行,是一个一维数组

所以,我们根据数组名是数组首元素地址这个原则,二维数组的数组名就表示第一行的地址,是一维数组的地址,那么在上面的例子当中,第一行一维数组的类型就是 int [ 5 ] ,所以第一行的地址类型就是 int ( * ) [ 5 ] ,那就意味着二维数组传参本质上就是传递了地址,而且传递的是第一行这个一维数组的地址,所以总结下来,我们形参也可以写成指针形式,如下:

总结:二维数组传参,形参部分可以写成数组,也可以写成指针形式

OKK,有关于指针的数组指针这一小部分我们今天就说到这里啦,最近开学比较忙,更新较迟,还望诸君见谅哈。我看大家一直都比较佛系,断更了从来也没有催更的哈哈哈哈哈。接下来尽量保持三四天一更的速度。咱们下期再见!与诸君共勉!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VS中.NET项目中央包管理和多目标框架配置

引言 通常我们在做项目时会给不同的程序员分配不同的功能模块进行各自开发,当然要遵守一定的约定或同一的框架设计。这在同一个工程中就会出现不同的项目类库需要引用,而这些类库可能会引用一些Nuget包,对于这些包的管理如果都在每个项目中去…

凸优化学习(1)——什么是凸优化、凸集、凸函数

🍅 写在前面 👨‍🎓 博主介绍:大家好,这里是hyk写算法了吗,一枚致力于学习算法和人工智能领域的小菜鸟。 🔎个人主页:主页链接(欢迎各位大佬光临指导) ⭐️近…

铲屎官都该知道的除浮毛神器——希喂、美的、352宠物空气净化器

为什么明明在南方,却能感受到北方柳絮漫天飞舞,鼻子被堵住的感觉?这都是家里的猫咪在作怪。最近我感觉家里的空气特别闷,打开窗户通风了很久都没什么用就没去管了。早上起来的时候鼻子异物感很重,甚至还咳嗽不止&#…

Android TextView 学习备忘

android:gravity 与 android:layout_gravity: Android TextView文本位置_mob649e8166858d的技术博客_51CTO博客https://blog.51cto.com/u_16175509/8597723

【重学 MySQL】三、RDBMS 和非 RDBMS

【重学 MySQL】三、RDBMS 和非 RDBMS 关系型数据库(RDBMS)关系型数据库的核心概念关系型数据库的优点关系型数据库的缺点 非关系型数据库(非 RDBMS)定义与特点主要特点常见类型应用场景优缺点NoSql 的演变早期阶段(20世…

langgraph tool如何发送自定义事件

在工具调用过程中,如何将中间状态返回到的stream,可以使用from langchain_core.callbacks import dispatch_custom_event方法实现。示例如下 from langchain_core.callbacks import dispatch_custom_event from langchain_core.tools import tooltool d…

分布式技术概览

文章目录 分布式技术1. 分布式数据库(Distributed Databases)2. 分布式文件系统(Distributed File Systems)3. 分布式哈希表(Distributed Hash Tables, DHTs)4. 分布式缓存(Distributed Caching…

QT 联合opencv 易错点

https://blog.csdn.net/qq_51699436/article/details/135777911 网上已经有大量优秀切详尽的文章来讲述QT联合opencv了,我把容易出错的点列出来备忘 1、在进行opencv进行编译时,要确认好是32位还是64位,因为在创建QT项目的时候QT和opencv要匹…

Vue(7)——工程化开发

目录 工程化开发 组件化开发 普通组件的注册使用 局部注册 全局注册 组件三大组成部分说明 template style script 组件通信 父子关系 prpo prpos校验 类型校验 其他校验 prop与data、单向数据流 工程化开发 工程化开发模式:基于构建工具的环境…

LLM大模型学习:AI大模型原理、应用与未来趋势!

1. 引言 在自然语言处理(NLP)与人工智能(AI)的广袤星海中,大语言模型(Large Language Models, LLMs)宛如一颗璀璨的星辰,正悄然改变我们与语言和机器的互动方式。本章将引领您步入一…

Python从入门到高手1.1节-在windows中安装Python

1.1.1 为什么要安装Python解释器? Python是一种解释型语言,代码的执行需由解释器来逐行读取、转换成机器语言并执行。没有Python解释器,我们编写的Python代码便无法在计算机中运行。 同学们对语言翻译器一定不陌生,我们通过翻译器…

MySQL之DQL-分组函数

1、分组函数 1. 分组函数语法 分组函数也叫聚合函数。是对表中一组记录进行操作,每组只返回一个结果。我们只讲如下5个常用的分组函数: 分组函数 含义 MAX 求最大值 MIN 求最小值 SUM 求和 AVG 求平均值 COUNT 求个数 分组函数的语法如下…

一款企业网盘,支持多种文件存储方式如FTP,SFTP,MINIIO等以及跨平台管理(附源码)

前言 随着数字化转型的推进,企业越来越依赖于云端技术来存储、管理和共享重要的业务文件。传统的本地存储处理方案虽然可靠,但在灵活性、可访问性和协作方面显得力不从心。尤其在远程工作变得日益普遍的今天,如何高-效地管理分散团队之间的文…

【IEEE独立出版 | 往届快至会后2个月检索,刊后1个月检索】2024年第四届电子信息工程与计算机科学国际会议(EIECS 2024)

在线投稿:学术会议-学术交流征稿-学术会议在线-艾思科蓝 电子信息的出现与计算机技术、通信技术和高密度存储技术的迅速发展并在各个领域里得到广泛应用有着密切关系。作为高技术领域中重要的前沿技术之一,电子信息工程具有前瞻性、先导性的特点&#x…

代码随想录训练营day42|188.买卖股票的最佳时机IV,309.最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费

188.买卖股票的最佳时机IV 变成了最多可以买卖k只股票 class Solution { public:int maxProfit(int k, vector<int>& prices) {vector<vector<int>> dp(prices.size(),vector<int>(2*k1,0));for(int i1;i<2*k1;i2){dp[0][i]-prices[0];}//初始…

【ESP32】fopen 无法创建.html文件

Long filename support设置为Long filename buffer in heap 后fopen正常创建.html文件

springBoot 集成https

springBoot 集成https 1、springBoot默认的证书格式 pring Boot 需要 .p12 或 .jks 格式的证书。如果你只有 .pem 和 .key 文件&#xff0c;可以使用 openssl 工具将它们转换成 .p12 文件 2、转换.p12 我的证书文件如下&#xff0c;需要转换 2.1 下载openssl https://slpr…

C#EF框架

EF概念: 实体框架&#xff08;Entity Framework&#xff09;是一种对象关系映射器&#xff08;O/RM&#xff09;&#xff0c;它使.NET开发人员能够通过.NET对象来操作数据库。它消除了开发人员通常需要编写的大多数数据访问代码的需求。ORM框架有个优势&#xff1a;解放开发人…

游戏开发| Unreal5.2-5.4接入chatGPT定制游戏NPC

引擎版本UE5.2 (也支持到5.4,有试用其它插件所以选择之前版本) 使用插件(免费) 1.VArest (插件官方介绍:Plugin that makes REST communications much easier.)可以让REST(Representational State Transfer)通信变得更加容易,涉及客户端与服务器之间通过 HTTP 协议…

帧缓冲 framebuffer

一、基本概念 framebuffer: 帧缓存、帧缓存&#xff08;显示设备&#xff09; Linux内核为显示提供的一套应用程序接口。&#xff08;驱动内核支持&#xff09; 分辨率&#xff1a; 像素点 显示屏&#xff1a;800 * 600&#xff08;横向有800个像素点&#xff0c;纵向有60…