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.hqwc.cn/news/227629.html

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

相关文章

Linux文件目录结构_文件管理

Linux文件目录结构 Linux目录结构简洁 windows:以多根的方式组织文件 C:\ D:\ E:\ Linux: 以单根的方式组织文件/ Linux目录结构视图 注意区分&#xff1a; 系统管理员&#xff1a;中文“根”&#xff0c;root 系统目录&#xff08;文件夹&#xff09;&#xff1a;根&#xf…

时间序列分析【python代码实现】

时间序列分析是一种用于建模和分析时间上连续观测的统计方法。 它涉及研究数据在时间维度上的模式、趋势和周期性。常见的时间序列分析包括时间序列的平稳性检验、自相关性和部分自相关性分析、时间序列模型的建立和预测等。 下面是一个使用Python实现时间序列分析的示例&…

鸿蒙4.0开发笔记之ArkTS语法基础@Entry@Component自定义组件的使用(九)

文章目录 一、自定义组件概述1、什么是自定义组件2、自定义组件的优点 二、创建自定义组件1、自定义组件的结构2、自定义组件要点3、成员变量的创建4、参数传递规则 三、练习案例 一、自定义组件概述 1、什么是自定义组件 在ArkUI中&#xff0c;UI显示的内容均为组件&#xf…

深入Rust的模式匹配与枚举类型

今天&#xff0c;我们将深入探讨Rust语言中的两个强大特性&#xff1a;模式匹配&#xff08;Pattern Matching&#xff09;和枚举类型&#xff08;Enums&#xff09;。这两个特性是Rust提供的核心工具之一&#xff0c;它们在处理多种类型的数据和复杂的逻辑控制中发挥着关键作用…

TDI网络过滤驱动应用(一)

文章目录 TDI网络过滤驱动应用1. 技术概览2. 数据包的抓取3. 应用实例3.1 TrafficShaper(限流)3.2 DnsRedirector(DNS重定向)3.3 TcpRedirector(TCP重定向) 4. 总结与参考 TDI网络过滤驱动应用 在前面的文章中&#xff0c;我们分析了TDI网络过滤驱动的基本开发框架以及TDI网络…

Node.js入门指南(完结)

目录 接口 介绍 RESTful json-server 接口测试工具 会话控制 介绍 cookie session token 上一篇文章我们介绍了MongoDB&#xff0c;这一篇文章是Node.js入门指南的最后一篇啦&#xff01;主要介绍接口以及会话控制。 接口 介绍 接口是前后端通信的桥梁 &#xff0…

数据库应用:MongoDB 库与集合管理

目录 一、理论 1.MongoDB用户管理 2.MogoDB库管理 3.MogoDB集合管理 二、实验 1.MongoDB用户管理 2.MogoDB库管理 3.MogoDB集合管理 三、问题 1.不显示新创建的数据库 2.插入数据报错 3.删除指定数据库报错 一、理论 1.MongoDB用户管理 (1) 内置角色 数据库用户…

Unity学习笔记11

一、视频播放功能 1.如何让视频在游戏场景中播放&#xff1f; 在Assets目录下添加一个渲染器纹理&#xff0c;步骤&#xff1a;新建→渲染器纹理 首先在创建一个平面&#xff0c;想让视频在平面上显示。在平面上添加一个组件 Video Player 然后将视频文件拖拽到视频剪辑位置上…

【数学】旋转矩阵

参考链接 OpenGL from OpenGL.GL import * from OpenGL.GLUT import * from math import * import numpy as np def draw_axes():glClear(GL_COLOR_BUFFER_BIT)# 绘制坐标轴glColor3f(1.0, 1.0, 1.0) # 设置坐标轴颜色为白色glBegin(GL_LINES)glVertex2f(-1.0, 0.0) # x 轴g…

HIT_OS_LAB4 系统调用

实验内容 编写iam.c和whoami.c iam.c #define __LIBRARY__ #include <unistd.h>// 定义系统调用 iam&#xff0c;参数为字符串 name _syscall1(int, iam, const char*, name);int main(int argc, char **argv) {int wlen 0;// 检查命令行参数数量if (argc < 2) {pri…

Appium PO模式UI自动化测试框架——设计与实践

1. 目的 相信做过测试的同学都听说过自动化测试&#xff0c;而UI自动化无论何时对测试来说都是比较吸引人的存在。相较于接口自动化来说&#xff0c;它可以最大程度的模拟真实用户的日常操作与特定业务场景的模拟&#xff0c;那么存在即合理&#xff0c;自动化UI测试自然也是广…

【随笔】OpenFlow概述

SDN之前的网络结构 硬件 操作系统 网络功能(交换机、路由器、防火墙、VPN、NAT、OSPF、BGP、Traffic Engineering) 北向是SDN应用 SDN控制器 底层是SDN数据面(通用硬件) openflow OPEN NETWORKING FOUNDATION 支持开放的SDN平台&#xff0c;一直使用的是openflow协议。 op…