初识指针(4)<C语言>

前言

        前面的文章,已经对指针的基础概念以及运用有了初步了解,我们可以进一步探究指针比较深入的知识,下文将主要介绍:使用指针数组模拟二维数组、字符指针变量、数组指针、二维数组传参的本质、函数指针、typedef关键字等。

目录

指针数组模拟二维数组

 字符指针变量

数组指针

二维数组传参的本质

函数指针

typedef关键字


指针数组模拟二维数组

        前文我们已经学习了指针数组,即存放指针的数组,而数组名就是一个指针,那么是否能够通过指针数组完成对多个数组的存放并输出呢?


 

 字符指针变量

        字符指针通常有两种情况,第一种指向单个字符的,第二种指向一个字符串的。前者很好理解,指向单个字符,那么这个指针中存放的就是这个字符的地址。那么指向一个字符串的呢,它指向的地址是首字母的地址,还是整个字符串的地址?

        本质上存放的是首元素的地址,但是它的访问权限是到字符串的最后一个字符,不会受到指针运算的影响。

 下面给出一道经典题深入理解字符指针

         在上图可以清楚的看到两个数组是不相同的,很好理解,两个数组哪怕元素完全一致,数组名不同,都不相同。

        但是两个字符指针是相等的,在c/c++中会有一个专门的区域来存放字符串,避免造成空间的浪费,所以哪怕两个字符指针名不一样,只要它们指向的字符串是一样的,它们就相等。

 


数组指针

        数组指针即指向数组的指针,前文我们已经说过,数组名即是首元素的地址,要想取整个数组的地址应该用&数组名


二维数组传参的本质

        前文我们已经学过一维数组传参的本质是一个地址,这也就是在传参时数组大小为什么可以被省略的原因,那么二维数组在传参时,是否也一样呢?

        答案是肯定的,传的就是首元素的地址,也就是第一排的地址。

         这个二维数组3行5列,且为int型4字节,每行20字节,当传参时第一排地址被传过去,+1时跳过20字节(一排的地址长度),所以我们的结论正确。


函数指针

        话说C语言中,万物皆地址,函数也有地址,我们能否通过一个函数指针来接收函数地址呢,是否能够通过函数指针完成对函数的引用呢?

        

         可以看到其实函数名就是地址,&函数名与函数名是完全等价的,函数指针与数组指针类似,都要保证指针名与*的先结合,其他部分就是函数的类型了。


typedef关键字

        typedefg关键字的作用就是给类型重命名,简单化。

如将unsigned int重命名为unit

 值得注意的是当对数组指针与函数指针进行重命名时,一定要把别名放在*右边。

如将int (*)(int,int)重命名为p

Respect!

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

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

相关文章

F. Circle Perimeter

思路&#xff1a;线性时间复杂度就可以解决&#xff0c;不用二分&#xff0c;我们枚举横坐标&#xff0c;然后看当前横坐标情况下多少个纵坐标满足条件。 代码&#xff1a; void solve(){int r;cin >> r;int y r, ans 0;for(int x 0;x < r;x ){ //枚举横坐标x&am…

只需3步,使用Stable Diffusion无限生成AI数字人视频(附安装包)

基本方法 搞一张照片&#xff0c;搞一段语音&#xff0c;合成照片和语音&#xff0c;同时让照片中的人物动起来&#xff0c;特别是头、眼睛和嘴。 语音合成 语音合成的方法很多&#xff0c;也比较成熟了&#xff0c;大家可以选择自己方便的&#xff0c;直接录音也可以&#…

Codeforces Round 944 (Div. 4) A - G

div.4只写部分题解了&#xff0c;都比较基础&#xff0c;数学偏多一点&#xff0c;几乎没有算法&#xff0c;有不懂的欢迎评论区提问&#xff01; A. My First Sorting Problem #include<bits/stdc.h> using namespace std ; typedef long long ll ; const int maxn 2…

org.hsqldb.jdbcDriver 类,导致 ClassNotFoundException 异常如何解决?

确保JDBC驱动包存在&#xff1a;检查系统是否已经安装了HSQLDB JDBC驱动。如果没有安装或驱动没有正确放置在类路径中&#xff0c;需要下载并添加它。你可以从 HSQLDB官网 下载JDBC驱动包。 添加JDBC驱动到类路径&#xff1a;将下载的HSQLDB JDBC驱动&#xff08;通常是一个JA…

2024年,Web开发新趋势!

随着我们迈入新的一年&#xff0c;现在正是审视2024年网页开发领域开始流行哪些趋势的绝佳时机。回顾2023年的一系列更新&#xff0c;以下是来年一些热门话题的概览。 自主托管有回归的趋势 近些年&#xff0c;自主托管一直是网页开发者和公司托管其应用程序的默认方式。开发…

【Linux系统编程】第十六弹---冯诺依曼体系结构与操作系统

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、冯诺依曼体系结构 2、操作系统原理 2.1、什么是操作系统&#xff1f; 2.2、用图解释操作系统 2.3、理解操作系统 总结 …

ES6+新特性-Let、Const与解构赋值

let&#xff1a;let关键字用于声明一个块级作用域的变量。这意味着变量只在声明它的代码块中可见&#xff0c;并且在代码块外不可访问。let声明的变量可以被重新赋值。 示例&#xff1a; {let x 10;console.log(x); // 输出10 } console.log(x); // 报错&#xff0c;x未定义…

C++ ——排序并保留索引

C自带的排序函数sort只能获得排好序的值&#xff0c;没办法像Matlab一样同时返回排序索引。 下面使用c11中的 lambda来为sort函数添加一个模式&#xff1a; #include <iostream> #include <vector> #include <numeric> #include <algorithm> using n…

SSH简介:安全远程访问的基石

在当今高度互联的数字时代&#xff0c;远程访问技术已成为IT运维、云服务管理以及日常开发不可或缺的一部分。SSH&#xff08;Secure Shell&#xff09;协议正是这一领域中最重要、应用最为广泛的工具之一。本文将深入浅出地介绍SSH的基本概念、工作原理、安全特性以及应用场景…

centos7.9系统rabbitmq3.8.5升级为3.8.35版本

说明 本文仅适用rabbitmq为RPM安装方式。 升级准备 查看环境当前版本&#xff1a; # cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) # rabbitmqctl status Status of node rabbitmq01 ... RuntimeOS PID: 19333 OS: Linux Uptime (seconds): 58 Is under …

在Tiled中制作动画瓦片图

什么是瓦片图&#xff1f;瓦片图是指用图块把游戏场景评出来 工具安装链接&#xff1a;Tiled | Flexible level editor 资源下载教程 资源下载&#xff1a;Mystic Woods - 16x16 Pixel Art Asset Pack by Game Endeavor 解压后得到一些资源 新建图块集合 Tiled的安装就不介绍…

【MySQL】——课程平台的创建设计

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

element-plus表单上传,唯一替换文件校验,封装方法统一管理

<el-formref"ruleFormRef":model"ruleForm":rules"rules"label-width"110px" ><el-form-item label"语言成绩材料" prop"languageList"><div class"dis-flex w100"><el-uploadref…

Column ‘xxx‘ not found.

java.sql.SQLException: Column xxx not found.上面的报错&#xff0c;是目标库表没有该字段&#xff0c;一般是访问错库表或者的确没有对应的字段&#xff0c;又或者是一些分布式数据库的从库schema缓存没来得及更新&#xff1b; 本次遇到上面的报错&#xff0c;一开始排查方…

什么是Meme币?——区块链技术的加密货币

Meme代币是一种基于区块链技术的加密货币&#xff0c;旨在为用户提供一种简单、有趣且易于传播的方式来进行数字资产交易和投资。Meme代币通常与特定的主题或故事相关联&#xff0c;通过社交媒体等渠道进行传播和推广&#xff0c;吸引更多的用户参与并增加其价值。 Meme代币的…

如何用爬虫解决问题

一、介绍 爬虫指的是一种自动访问互联网上网页的程序,通过自动化的方式获取网页上的数据并进行处理。它可以从互联网的各个网站上抓取信息,如新闻、商品信息、图片等,并将这些数据存储或用于其他用途,如数据分析、搜索引擎索引等。爬虫可以模拟人的行为,通过访问网页上的…

英语学习笔记4——Is this your ...?

Is this your …? 词汇 Vocabulary suit /sut/ n. 西装&#xff0c;正装 suit 的配套&#xff1a; shirt n. 衬衫tie n. 领带&#xff0c;领结belt n. 腰带trousers n. 裤子shoes n. 鞋子 school /skuːl/ n. 学校 所有学校 搭配&#xff1a;middle school 初中    hig…

浅谈现代消息队列与云存储

一、前言 1970 年代末&#xff0c;消息系统用于管理多主机的打印作业&#xff0c;这种削峰解耦的能力逐渐被标准化为“点对点模型”和稍复杂的“发布订阅模型”&#xff0c;实现了数据处理的分布式协同。随着时代的发展&#xff0c;Kafka&#xff0c;Amazon SQS&#xff0c;Ro…

【OceanBase系列】—— OceanBase V4.x 中的常用备份恢复 SQL 总结

OceanBase 数据库的物理备份分为数据备份和日志归档。 数据备份指的是备份数据的功能&#xff0c;分为全量备份和增量备份两种&#xff1a; 全量备份是指备份所有的宏块增量备份是指备份上一次备份以后新增和修改过的宏块日志归档是基于 clog 日志数据的一种流式的自动归档功能…

C++牛客小白月赛题目分享(1)生不逢七,交换数字,幻兽帕鲁

目录 1.前言 2.三道题目 1.生不逢七 1.题目描述 2.输入描述: 3.输出描述: 4.示例&#xff1a; 5.题解&#xff1a; 2.交换数字 1.题目描述&#xff1a; 2.输入描述&#xff1a; ​编辑 3.输出描述&#xff1a; 4.示例&#xff1a; 5.题解&#xff1a; 3.幻兽帕…