当前位置: 首页 > news >正文

C语言--指针进阶3--数组指针

数组指针定义

类比:

整型指针--指向整型的指针

int a = 10;
int* pa = &a;

字符指针--指向字符的指针

char ch = 'a';
char* pc = &ch;

数组指针--指向数组的指针

int arr[10] = { 0 };
int(*p)[10] = &arr; // 数组指针

区分:指针数组和数组指针

int(*p1)[10]; // 数组指针
int* p2[10];  // 指针数组

p1先和*结合,说明p是一个指针变量,指向的是一个大小为10个整型的数组,所有p1是一个指针,指向一个数组,p1是数组指针。

p2是一个数组,有10个元素,存放int*类型,p2是指针数组。

注:[ ]优先级高于 * ,必须使用 () 使p1与 * 先结合。

数组名和&数组名

数组名绝大多数情况下是数组首元素地址,但是有两个例外:

1 &数组名,数组名表示整个数组

2 sizeof(数组名),数组名表示整个数组,计算的是整个数组的大小。

int arr[10];

对于上面的数组,arr和&arr分别是什么意思?

我们知道arr是数组名,数组名表示首元素的地址,&arr是否和arr相同,先看下面这段代码。

int main()
{int arr[10] = { 0 };printf("arr = %p\n", arr);printf("&arr= %p\n", &arr);return 0;
}

运行结果:

可见&arr和arr打印的地址一样,那么它是否和arr一样表示的是数组首元素地址呢?在看下面这段代码:

int main()
{int arr[10] = { 0 };printf("arr = %p\n", arr);printf("&arr= %p\n", &arr);printf("arr+1 = %p\n", arr + 1);printf("&arr+1= %p\n", &arr + 1);return 0;
}

运行结果:

可以发现&arr和arr虽然值一样,但它们的意义应该不一样。事实上,&arr表示的是整个数组的地址,在本例中,&arr的类型是int(*)[10],即数组指针类型。&arr+1偏移了整个数组的大小40(打印的地址为十六进制),arr+1则偏移了一个整型大小。

所以,数组名和&数组名的值虽然相同,但是它们的意义并不相同,可以理解为一个是数组首元素地址,另一个是数组首地址,本质是它们的类型不同,一个是同类型指针,另一个则是数组指针。

理解了数组指针和&数组名的概念,在来看一下(指针)数组指针类型是什么样的:

int* arr[10]; // (整型)指针数组
int* (*p)[10] = &arr; // (整型指针)数组指针

数组指针的使用

引入--指针访问一维数组

我们知道,可以通过下标或指针访问数组,如下:

int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int sz = sizeof(arr) / sizeof(arr[0]);// 下标访问数组for (int i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");// 指针访问数组int* p = arr;for (int i = 0; i < sz; i++){printf("%d ", *(p + i));//*(p+i)与p[i]等价}return 0;
}

运行结果:

数组指针访问二维数组

    int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };

通过下标访问二维数组:

int main()
{int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){printf("%d ", arr[i][j]);}printf("\n");}return 0;
}

运行结果:

arr[i]其实是数组每一行首元素的地址,arr[i][j]等价*(arr[i]+j)。对于二维数组,它的首元素是数组第一行,它的数组名就是数组第一行的地址,是一个数组指针。与用指针访问一维数组类似,我们可以定义一个数组指针用来访问二维数组,但这并不是数组指针的真实用途。

数组指针的一个主要用法是作为参数接收二维数组,例如:

void print_arr(int(*arr)[3], int row, int col)
{int i = 0;for (i = 0; i < row; i++){for (int j = 0; j < col; j++){printf("%d ", arr[i][j]);}printf("\n");}
}
int main()
{int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };print_arr(arr, 3, 3);return 0;
}

运行结果:

理解二维数组名:

事实上二维数组传参(int arr[][3])的本质就是传递一个数组指针,即二维数组的数组名。关于数组传参和指针传参,将在下篇深入讲解。

继续学习指针进阶内容,见下篇:数组参数/指针参数

相关文章:

C语言--指针进阶3--数组指针

数组指针定义 类比&#xff1a; 整型指针--指向整型的指针 int a 10; int* pa &a; 字符指针--指向字符的指针 char ch a; char* pc &ch; 数组指针--指向数组的指针 int arr[10] { 0 }; int(*p)[10] &arr; // 数组指针 区分&#xff1a;指针数组和数组…...

购物车案例

1功能模块分析 请求动态渲染购物车&#xff0c;数据存vuex 数据框控件 修改数据 动态计算总价和总数量 2脚手架新建项目 终端安装axios&#xff1a;npm install axios -g 基于json-server工具&#xff0c;准备后端接口服务环境:&#xff08;模拟后台假数据&#xff09; 1…...

c++ chrono

chrono chrono是一个time library, 源于boost&#xff0c;现在是C标准 使用时&#xff0c;需要导入chrono&#xff0c;其所有实现均在std::chrono namespace下。 #include <chrono>chrono是一个模版库&#xff0c;使用简单&#xff0c;功能强大&#xff0c;有三个重要…...

实现长短地址的相互映射

长地址请求&#xff0c;返回短地址&#xff0c;如何实现长短地址的相互映射 转换为&#xff1a; 解决方式&#xff1a; 使用发号策略&#xff0c;给每一个长地址发一个号&#xff0c;不停自增&#xff0c;第一个使用这个服务的人得到的短地址是xx.xx/0 第二个是 xx.xx/1 &…...

第1讲:前后端分离思想

什么是前端 前端其实是个很大的范畴。 简单点说&#xff0c;针对浏览器的开发&#xff0c;浏览器呈现出来的页面就是前端。它的实质是前端代码在浏览器端被编译、运行、渲染。前端代码主要由三个部分构成&#xff1a;HTML&#xff08;超文本标记语言&#xff09;、CSS&#xf…...

【深度学习】【Opencv】Python/C++调用onnx模型【基础】

【深度学习】【Opencv】python/C调用onnx模型【基础】 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【Opencv】python/C调用onnx模型【基础】前言Python版本OpenCVWindows平台安装OpenCVopencv调用onnx模型 C版本OpenCVWindows平…...

C# MQTT通讯

文章目录 前言MQTTnetMQTT初始变量生成option连接Mqtt服务器发送数据添加订阅 前言 MQTTnet是Mqtt的net版本。国内MQTTnet教程比较老旧&#xff0c;都是2.x版本。MQTTnet在4.x版本版本代码逻辑有比较大的改动。所以最后还是面向Github编程。 EMQ X介绍及安装 长链接(MQTT)测…...

使用c++实现输出爱心(软件:visual Studio)

#include <iostream> using namespace std;int main() {//爱心曲线方程(x^2y^2-a)^3-x^2*y30double a 0.5;//定义绘图边界double bound 1.3 * sqrt(a);//x,y坐标变化步长double step 0.05;//二维扫描所有点,外层逐层扫描for (double y bound; y > -bound; y - ste…...

uploadifive上传工具php版使用

uploadifive自带的DEMO文件。 下载地址&#xff1a; http://www.uploadify.com/download/ <!DOCTYPE HTML> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"> <title>UploadiFive Test&…...

Docker容器管理

docker容器相当于一个进程&#xff0c;性能接近于原生&#xff0c;几乎没有损耗&#xff1b; docker容器在单台主机上支持的数量成百上千&#xff1b; 容器与容器之间相互隔离&#xff1b; 镜像是创建容器的基础&#xff0c;可以理解镜像为一个压缩包 Docker容器的管理 容…...

【文末送书】用Chat GPT轻松玩转机器学习与深度学习

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…...

Redis的学习

Redis Redis特征 键值型&#xff0c;value支持多种不同数据结构&#xff0c;功能丰富单线程&#xff0c;每个命令具有原子性低延迟&#xff0c;速度快&#xff08;基于内存&#xff0c;IO多路复用&#xff0c;良好的编码&#xff09;支持数据持久化支持主从集群&#xff0c;分…...

java版Spring Cloud+Mybatis+Oauth2+分布式+微服务+实现工程管理系统

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管…...

Vue 3的 h 函数详解

Vue 3的 h 函数详解 文章目录 Vue 3的 h 函数详解1、什么是h函数2、基本用法3、动态组件4、事件监听器5、条件渲染 Vue 3的 h函数&#xff08; createVNode&#xff09;是前端开发中一个强大的工具&#xff0c;用于创建虚拟DOM节点。虚拟DOM是Vue框架中的核心概念&#xff0c…...

防近视台灯什么牌子好?推荐有效预防近视的台灯

作为一名家长&#xff0c;平常最关心的应该就是孩子能够健康成长了。但是通过调查数据我们可以发现我国青少年近视率位居世界第一&#xff0c;儿童青少年总体近视率为52.7%&#xff1b;其中6岁儿童为14.5%&#xff0c;小学生为36.0%&#xff0c;初中生为71.6%&#xff0c;高中生…...

五、C#—字符串

&#x1f33b;&#x1f33b; 目录 一、字符串1.1 字符类型1.2 转义字符1.3 字符串的声明及赋值1.3.1 c# 中的字符串1.3.2 声明字符串1.3.3 使用字符串1.3.4 字符串的初始化1.3.4.1 引用字符串常量之初始化1.3.4.2 利用字符数组初始化1.3.4.3 提取数组中的一部分进行初始化 1.3.…...

【Vue3 源码解析】nextTick

nextTick 是 Vue 3 中用于异步执行回调函数的函数&#xff0c;它会将回调函数延迟到下一个微任务队列中执行。其中&#xff0c;Vue 更新 DOM 是异步的。下面是对 nextTick 函数的详细解释&#xff1a; export function nextTick<T void, R void>(this: T,fn?: (this:…...

基于ModebusRTU通信采集温度湿度项目案例

目录 一、模拟温湿度模拟 【1.1】温湿度仪表参数 【1.1】使用电脑模拟传感器 【1.2】使用Codesys软件模拟传感器 二、自定义控件UI设计 【2.1】自定义控件温度湿度柱状设计 ​编辑 【2.1.1】设置温度湿度柱状实际显示【属性】 【2.1.2】设置温度湿度柱状的背景颜色【属…...

【已解决】关于如何将Doccano标注的文本转换成NER模型可以直接处理的CoNLL 2003格式

笔者要做命名实体识别&#xff08;NER&#xff09;的工作&#xff0c;选择了Doccano平台来进行文本标注。 Doccano平台对标注结果的导出格式是JSONL格式&#xff0c;我们导出了NER.jsonl文件。 但是用python语言搭建深度学习模型来实现NER时&#xff0c;一般接收的输入数据格式…...

网络编程day03(UDP中的connect函数、tftp)

今日任务&#xff1a;tftp的文件上传下载&#xff08;服务端已经准备好&#xff09; 服务端&#xff08;已上传&#xff09; 客户端&#xff1a; 代码&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h…...

30天试用期重置神器:JetBrains IDE免费使用终极解决方案

30天试用期重置神器&#xff1a;JetBrains IDE免费使用终极解决方案 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 还在为JetBrains IDE试用期到期而烦恼吗&#xff1f;每次30天试用结束后&#xff0c;那些强大的…...

从PCB走线到连接器:手把手教你用ADS仿真优化S参数(避坑SI/PI设计)

从PCB走线到连接器&#xff1a;用ADS仿真优化S参数的实战指南 在高速数字电路和射频设计中&#xff0c;S参数就像设计师的"体检报告"&#xff0c;直观反映信号传输路径的健康状况。想象一下&#xff0c;当你设计的PCIe Gen4接口在实验室测试时出现信号完整性问题&am…...

手把手教你用Zynq-7100 FPGA实现100Mbps OOK信号定时同步(含完整Verilog代码)

基于Zynq-7100的OOK信号定时同步实战&#xff1a;从算法到FPGA实现全解析 在无线通信系统中&#xff0c;定时同步是数字接收机设计中最关键的环节之一。当我们需要在Xilinx Zynq-7100 FPGA平台上实现100Mbps OOK信号的接收处理时&#xff0c;面临的最大挑战是如何在仅有50MHz外…...

HsMod终极指南:如何通过55项功能全面优化炉石传说游戏体验

HsMod终极指南&#xff1a;如何通过55项功能全面优化炉石传说游戏体验 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是基于BepInEx框架开发的炉石传说模改插件&#xff0c;专为提升…...

基于CircuitPython与BLE的无线手势鼠标:从传感器到HID设备的实践

1. 项目概述与核心思路想没想过&#xff0c;你手里的那块开发板&#xff0c;除了点灯、读传感器&#xff0c;还能直接变成你电脑的鼠标&#xff1f;不是通过USB线&#xff0c;而是像你的蓝牙耳机一样&#xff0c;无线连接&#xff0c;靠手腕的晃动来控制光标。这个想法听起来有…...

BallonsTranslator:3分钟搞定漫画翻译的终极AI辅助工具

BallonsTranslator&#xff1a;3分钟搞定漫画翻译的终极AI辅助工具 【免费下载链接】BallonsTranslator 深度学习辅助漫画翻译工具, 支持一键机翻和简单的图像/文本编辑 | Yet another computer-aided comic/manga translation tool powered by deeplearning 项目地址: https…...

郎朗乐境音乐会定档7月5日深圳:以破界之姿,开启全维感官盛宴

2026年7月5日&#xff0c;郎朗乐境音乐会将在深圳市宝安体育中心体育馆启幕&#xff0c;作为“深圳国际形象大使”的郎朗&#xff0c;将在这座以创新著称的国际化都市&#xff0c;&#xff0c;进一步探索艺术表达形式的多重可能&#xff0c;呈现一场融合音乐、文化与多维感官体…...

轻量级文本处理引擎Tokely:从分词到模型推理的部署与优化实战

1. 项目概述与核心价值最近在折腾一些个人项目&#xff0c;经常需要处理文本生成、内容摘要这类任务。市面上现成的API服务虽然方便&#xff0c;但成本、隐私和定制化程度总让人不太放心。于是&#xff0c;我开始寻找一个能自己部署、轻量且功能聚焦的文本处理工具。在这个过程…...

深入聊聊Zynq RFSoC里那些容易搞混的时钟:从外部输入到片内PLL再到AXI-Stream接口时钟

深入解析Zynq RFSoC时钟架构&#xff1a;从外部输入到AXI-Stream接口的完整路径 在Zynq UltraScale RFSoC的设计中&#xff0c;时钟系统堪称整个架构的"心脏"。尤其当涉及多通道同步、跨时钟域数据传输等高阶应用时&#xff0c;时钟配置的细微差别往往会导致性能差异…...

从零构建开源ADAS原型:车道检测、目标识别与PID控制实践

1. 项目概述&#xff1a;从零到一&#xff0c;构建一个开源的ADAS原型系统 最近几年&#xff0c;汽车行业最火的话题之一就是“智能驾驶”。无论是传统车企还是新势力&#xff0c;都在宣传自家的辅助驾驶功能&#xff0c;什么自适应巡航、车道保持、自动紧急制动&#xff0c;听…...