C语言进阶指南(11)(指针数组与二维数组)

*欢迎来到博主的专栏——C语言进阶指南
博主id:reverie_ly

文章目录

    • N级指针
    • 指针数组
      • 指针数组与二维数组
      • 数组指针作为函数的参数

N级指针

指针变量是一个存放地址的变量,在C语言中,每个变量都会有一个地址值。所以指针变量也有一个地址。

int main()
{
	int a = 0;
	int* pi = &a;//pi变量的值是a的地址
	int** ppi = π//ppi的值是pi的地址
}

在这里插入图片描述
从vs调试的监视窗口可以看到
pi的类型是int*,存储的是int类型的a的地址。 pi是一级指针
ppi的类型是int**,存储的是int*类型的pi的地址。 ppi是二级指针.
在这里插入图片描述

将存储数据变量地址的指针称为1级指针,存储一级指针地址的指针称为2级指针,以此类推。N级指针存储的是N-1级指针的地址。

指针数组

声明指针数组的标准形式如下

type *name[];

name是标识符,指针数组的声明是先让标识符与数组声明符([])结合,使这个声明是一个数组,然后在声明指针(*),声明这个数组是一个指针的数组。type是指针指向的变量的类型。

以一个指针数组的声明为例

	int a, b, c, d, e;
	int* parr[5] = { &a,&b,&c,&d,&e };

该数组parr是一个 5个元素 都是 指针 的 数组。 分别指向a,b,c,d,e这五个变量。此时可以通过解引用数组的元素来操作这些变量

	int a, b, c, d, e;
	int* parr[5] = { &a,&b,&c,&d,&e };

	*parr[0] = 1;//a=1
	*parr[1] = 2;//b=2
	*parr[2] = 3;//c=3
	*parr[3] = 4;//d=4
	*parr[4] = 5;//e=5

指针数组与二维数组

在数组和指针这一章里我们了解到数组名和指针之间的关系。当数组名作为指针使用时,
指针的值是数组的首元素的地址。
而二维数组的行下标指向的是一维数组的地址。以arr[2][5]为例
在这里插入图片描述
我们可以发现:

指针数组可以充当二维数组的行下标

因为他们都有着类似的作用,即指向一个数组的地址。

	int arr[2][5] = { 0 };
	int* parr[2] = { arr[0],arr[1] };
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 5; j++)
		{
			parr[i][j] = j;
		}
	}
	return 0;

在该程序中,我们将arr[0]和arr[1]作为指针数组的元素,当对parr进行元素访问操作时,可以得到arr[0]或arr[1]的地址。再对元素进行访问操作,就能得到二维数组中的元素。
在这里插入图片描述

数组指针作为函数的参数

可以将指针数组作为函数原型的参数来对二维数组进行操作。

void  print(int* parr[])
{
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 5; j++)
		{
			printf("%d ", parr[i][j]);
		}
		printf("\n");
	}
}

如果将上面例子结合起来,正确的传参形式是
print(parr);

在C语言进阶指南(10)中我们提到了,数组名在作为指针操作时会发生的类型降级的例子。所以上述函数在设计原型时也可以设计为

void  print(int** parr)
{
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 5; j++)
		{
			printf("%d ", parr[i][j]);
		}
		printf("\n");
	}
}

相关文章传送门:
C语言进阶指南(10)(指针与数组)

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

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

相关文章

算法—双指针

双指针算法可以帮忙把时间复杂度降低一个维度&#xff0c;即原本O&#xff08;n2&#xff09;降为O(n)&#xff1b;将O(n)降为O(1) 移动零 移动零 题目解析 将所有0移动到末尾保持非0元素相对顺序对数组进行原地操作&#xff08;不开辟额外空间&#xff09; 算法原理 数组…

互联网洗鞋店小程序怎么做,流程有哪些?

洗鞋店小程序让洗鞋更便捷高效&#xff0c;用户只需通过手机预约&#xff0c;即可享受上门取送服务&#xff0c;省时省力&#xff0c;让鞋子焕然一新。下面我们详细介绍这个小程序的功能&#xff1a; 1. 轻松预约&#xff1a;用户可以随时随地通过洗鞋店小程序预约洗鞋服务&…

SDN、SD-WAN、CDN、SDH分别是什么,有什么关联?

SDN代表“软件定义网络”&#xff0c;是一种网络架构&#xff0c;它将网络控制和数据转发分离。SDWAN代表“软件定义广域网”&#xff0c;是SDN的一种实现&#xff0c;在广域网中使用虚拟化技术来连接分支机构和数据中心。 CDN代表“内容分发网络”&#xff0c;是一种通过在全球…

Spring框架体系及Spring IOC思想

目录 Spring简介Spring体系结构SpringIOC控制反转思想自定义对象容器Spring实现IOCSpring容器类型容器接口容器实现类对象的创建方式使用构造方法使用工厂类的方法使用工厂类的静态方法对象的创建策略对象的销毁时机生命周期方法获取Bean对象的方式通过id/name获取通过类型获取…

GitHub----使用记录

一、上传文件到仓库 1、首先新建一个github仓库 然后先记住这一句指令 2、下载git工具 https://git-scm.com/downloads 下载工具安装不用运行 3、使用git工具上传文件并推送 找到你想上传的文件的位置&#xff0c;右击git Bush here git init &#xff1a;初始化这个仓…

CSP认证2023-03:田地丈量、垦田计划、LDAP,python满分解答代码

CSP认证2023-03&#xff1a;田地丈量、垦田计划、LDAP&#xff0c;python满分解答代码 目录 一、田地丈量 问题描述 输入输出 思路 代码和结果 二、垦田计划 问题描述 输入和输出 思路 代码和结果 三、LDAP 问题描述 思路 代码和结果 一、田地丈量 问题描…

React 签字手写签名组件 react-signature

安装依赖包 npm install uiw/react-signature示例代码 import React, { useRef } from "react"; import Signature from uiw/react-signature;export default function App() {const $svg useRef(null);const handle (evn) > $svg.current?.clear();return (…

重写equals为什么要重写hashCode

答&#xff1a;因为两个相等的对象的 hashCode值必须是相等。也就是说如果equals方法判断两个对象是相等的&#xff0c;那这两个对象的hashCode值也要相等。 如果重写equals()时没有重写 hashCode()方法的话就可能会导致equals方法判断是相等的两个对象&#xff0c;hashcode值…

LabVIEW通过编程将图形类控件的X轴显示为时间戳

LabVIEW通过编程将图形类控件的X轴显示为时间戳 每个版本的LabVIEW中都有属性节点&#xff0c;可以以编程方式调整X轴和Y轴格式。对于不同版本的LabVIEW&#xff0c;这些属性节点无法在同一个位置找到。请参阅以下部分&#xff0c;了解特定版本LabVIEW的相关属性节点的位置。 …

供应商关系管理软件:如何使用它来改善供应商关系?

从最基本的角度来说&#xff0c;企业需要供应商为其生产和销售的产品或服务提供原材料&#xff0c;或者为其提供资源和服务来经营自己的业务。 建立稳定而健康的供应商关系的最大优势之一&#xff0c;就是可以为企业带来更高的价值。企业对供应商了解越多&#xff0c;供应商对…

强基固本,红海云数字化重塑提升国企干部管理能力

国有企业的干部管理体系建设具有重要的战略意义&#xff0c;对于构建高素质专业化的干部队伍&#xff0c;推动企业高质量发展至关重要。特别是在党的二十大以后&#xff0c;建设中国特色现代企业制度&#xff0c;在完善公司治理中加强党的领导&#xff0c;加强党管干部党管人才…

全球市场:跨境电商消费者权益维权的趋势

随着数字技术的迅猛发展&#xff0c;跨境电商逐渐成为全球贸易的引领者&#xff0c;但与此同时&#xff0c;消费者权益维权问题也备受关注。本文将深入探讨跨境电商消费者权益维权的趋势&#xff0c;剖析全球市场中涌现的挑战和解决方案&#xff0c;以期为构建更加公平、透明的…

GoWeb学习-第二天

文章目录 从零开始学Go web——第二天一、安装Go语言二、建立web目录2.1 创建GO语言包目录2.2 创建Go web文件 三、编译并运行Go web应用3.1 编译并运行3.2 查看结果 从零开始学Go web——第二天 ​ 第一天我们了解了与web息息相关的HTTP协议&#xff0c;聊了聊Go与web的关系等…

struts2 代码执行 (CVE-2020-17530)

struts2 代码执行 &#xff08;CVE-2020-17530&#xff09; 使用struts2框架的网站 URL上会有.action结尾这个特征 名称: struts2 代码执行 &#xff08;CVE-2020-17530&#xff09; 描述: Struts2是一个基于MVC设计模式的Web应用框架&#xff0c;它本质上相当于一个servlet…

PM2 在线和离线部署uvicorn和fastapi项目过程

PM2介绍 PM2 is a daemon process manager that will help you manage and keep your application online 24/7 PM2是一个后台进程管理工具&#xff0c;能帮助管理应用和维持应用7*24小时运行。 PM2在线安装 npm install pm2 -gPM2离线安装(适用于内网) 参见 如何离线安装pm2…

算法通关村第二关—手写链表反转(青铜)

链表反转的三种方式 一、建立虚拟头结点辅助反转 为了方便反转&#xff0c;可以创建一个ans结点&#xff0c;让ans.next head,然后后面的结点一次插入到ans.next 在下图中&#xff0c;对&#xff08;1->2->3->4->5&#xff09;进行反转&#xff0c;可以创建ans&…

马骑顿部署实在RPA,所产价值超该项目投入6倍

“数字化最大的挑战在于我们增长太快了&#xff0c;对于全域经营的DTC品牌来说&#xff0c;让一个部门去管理所有平台数据&#xff0c;形成品牌全域生意的协同实非易事。”马骑顿运营部负责人表示。2022年&#xff0c;马骑顿搭建企业数据中台&#xff0c;统一管理线上数据&…

wsj0数据集原始文件.wv1.wv2转换成wav文件

文章目录 准备一、获取WSJO数据集二、安装sph2pipe三、转换代码四、结果展示 ​ 最近做语音分离实验需要用到wsj0-2mix数据集&#xff0c;但是从李宏毅语音分离教程里面获取的wsj0-2mix只有一部分。从网上获取到了完整的WSJO数据集后&#xff0c;由于原始的语音文件后缀是wv1或…

网关路由器双栈配置中的IPv6相关选项解析

1、引言 讲知识往往是枯燥无味的&#xff0c;我们先从问题入手。家庭网关&#xff08;光猫&#xff09;、路由器是我们每个人或多或少都有所接触的2种设备。现在一般都是光纤入户&#xff0c;通常每个家庭配备一个光猫和一台家用路由器。 目前有许多网络服务已经提供了IPv6支…

距离“全自动”漏洞挖掘又近了一步!腾讯安全大数据实验室论文入选ACM CCS 2023

计算机领域国际权威学术顶会ACM CCS 2023于11月26日在丹麦哥本哈根开幕。腾讯安全大数据实验室团队论文《Hopper: Interpretative Fuzzing for Libraries》被大会收录&#xff0c;昨天&#xff0c;实验室研究员谢雨轩受邀出席大会进行主题分享。 该论文提出了解释性模糊测试&a…
最新文章