指针小结3(指针数组数组指针) 文章大纲一、引言指针与数组在C语言中的重要性指针数组与数组指针的概念混淆问题本文目标清晰区分两者并掌握实际应用指针指针数组指的是一个数组里面元素是指针。每个数组元素都可以存储一个指针这些指针通常指向其他数据类型的变量或内存块。应用场景字符串数组、动态内存管理函数指针数组定义例 int *arr[5]就是一个包含了5个int类型数据指针数组arr是一个数组包含5个元素每个元素都是一个int*类型的指针。int a10,b20;int *arr[2]; //指针数组包含2个元素arr[0]a; //第一个元素指向a的地址arr[1]b; //第二个元素指向b的地址printf(arr[0]指向的值:%d\n,*arr[0]); //输出10printf(arr[1]指向的只:%d\n,*arr[1]); //输出20内存大小数组总大小n*sizeofint*每个格子存一个指针。示例int a10,b20,c30;int *p[3] {a, b, c};printf(%d, *(p[0])); // 等价*(a) →10字符串数组// 指针数组每个元素是char*字符串首地址char *strArr[] {apple,banana,cat};注意点字符串字面量存这只读常量区不能修改内容类似于strArr[0][0]x;未定义行为和二维数组进行对比char arr[3][10]{apple,banana,cat}; // 二维字符数组连续内存每个字符串占10字节 char *p[3]{apple,banana,cat}; // 指针数组3个指针指向常量区字符串内存不连续数组指针类似 int(*p)[n],其含义p是一个指针专门指向一个含有n个int元素的一维数组。大小p本身就是一个指针大小32位4字节64位8字节*p代表它指向的整个数组类型是int[n]int arr[5] {1,2,3,4,5}; int (*p)[5] arr; // 取整个数组的地址 arr赋值给数组指针 printf(%p\n, p); // 数组首地址 printf(%p\n, *p); // *p等价于arr数组首元素地址 printf(%d\n, (*p)[0]); // 取数组第0个元素等价于 arr[0]易错点如果写成int*p[5]arr此时代表的是什么呢arr是数组名退化以后为指向数组内部首地址的指针此时我指向指向对象是整个一维数组所以必须加上arr取整个数组的地址这种情况下也可以理解为arr令一维数组不进行退化了不然极易混淆正确写法int(*p)[5]arr int(*p)[5]arr int(*p)arr典型用途遍历二维数组本质数组的数组int a[3][4],a是3个数组每个数组4个int#include stdio.h int main() { int a[3][4] {{1, 2, 3, 4}, {2, 3, 4, 5}, {3, 4, 5, 6}}; int (*p)[4] a; // a等价于a[0],a[0]是长度4的int数组 for (int i 0; i 3; i) { for (int j 0; j 4; j) { printf(%d, p[i][j]); } } }p[i]等价于*pi得到第i行一维数组p[i][j]访问第i行第j列元素。注意点二维数组传参//正确形参数组指针写法void fun(int(*a)[4],int row);//等价写法。形参[ ]会退化为指针void fun(int a[ ][4],int row);二维数组做函数参数必须指定列数本质就是数组指针。由行指向列一维数组。*p含义区分数组指针 int*p[5];*p 得到数组名首元素地址取值要用*p)[0],不能写成*p[0]!*p[0]等价于*p[0]),再回顾下数组指针中指针p指向的一个数组此时优先算了p[0]语法上就错误了也说不通现在指针到底指向了哪个地址。指针数组的野指针风险int *p[3]; //数组3个指针未初始化都是野指针*p[0]100; //❌崩溃没有指向合法内存字符串两种存储区别char *s[ ]{hi,hello}; //指针数组字符串在常量区不可写char s[2][10]{hi,hello}; //二维数组字符串在栈可以修改字符返回值坑不要返回局部数组的地址int* fun(){ int arr[5]{1,2,3};return arr; //❌局部函数栈销毁悬空指针 }函数当中变量都是局部变量存储在栈中随程序运行结束便销毁。数组指针也一样不能返回指向局部数组的数组指针。

相关新闻

最新新闻

橙皮书共读|Hermes Agent(二)深度拆解五大核心支柱:自进化智能体的运行内核

橙皮书共读|Hermes Agent(二)深度拆解五大核心支柱:自进化智能体的运行内核

橙皮书共读|Hermes Agent(二)深度拆解五大核心支柱:自进化智能体的运行内核前言 上一篇我们从Harness Engineering五层模型出发,厘清了自进化智能体的理论基石,也明确了Hermes五大支柱与Harness五层的对应关…

2026/8/23 9:16:13
27届北京某小厂面经,八股跟场景题都有,面完第三天给offer(带思路)

27届北京某小厂面经,八股跟场景题都有,面完第三天给offer(带思路)

面试官人挺好,看着我回答的比较困难的时候就问点简单的八股1.简述一下你在上家公司主要做了什么遇到什么问题,对你有什么帮助,学到了什么 2.讲一下你们公司的权限体系(就是怎么进行权限认证:前端组件展示,接…

2026/8/23 9:16:13
组合数取模与二维前缀和:解决NOIP竞赛中大量区域查询问题

组合数取模与二维前缀和:解决NOIP竞赛中大量区域查询问题

1. 项目概述:从一道经典竞赛题看组合数与前缀和的实战结合 看到“P2822 [NOIP2016 提高组] 组合数问题”这个标题,很多参加过信息学竞赛的老朋友估计会心一笑。这可不是一道简单的数学题,它当年在考场上卡住了不少人,核心原因就在…

2026/8/23 9:16:13
【Python量化实战 #18】回测报告一大屏K线全搞定?Python用pyecharts和matplotlib画股票看板

【Python量化实战 #18】回测报告一大屏K线全搞定?Python用pyecharts和matplotlib画股票看板

本文是「Python量化实战」系列第 18 篇(工程化模块),上一篇我们把数据存进了 SQLite,CSV 写 113ms、SQLite 78ms。但数据存下来后真正"看得见"才有价值——回测报告里贴一堆 Excel 数字,老板三秒划走&#x…

2026/8/23 9:16:13
【项目编号:project75849】【Spring Boot 项目实战】动植物信息管理 + 花卉商城 + 交流社区一体化系统(源码可领)

【项目编号:project75849】【Spring Boot 项目实战】动植物信息管理 + 花卉商城 + 交流社区一体化系统(源码可领)

【Spring Boot 项目实战】动植物信息管理 花卉商城 交流社区一体化系统(源码可领)Spring Boot / Spring Security / Thymeleaf / MySQL本文不按传统“需求—设计—实现”模板展开,而是从信息治理、互动社区和交易模块三条线分析系统。一、系…

2026/8/23 9:16:13
层次分析法(AHP)详解:从主观判断到量化决策的完整指南

层次分析法(AHP)详解:从主观判断到量化决策的完整指南

1. 从拍脑袋到结构化决策:为什么我们需要层次分析法 做项目、搞研究、甚至生活中选工作、挑房子,我们总会遇到需要“做决定”的时刻。很多时候,这个决定过程是模糊的:几个方案各有优劣,A方案成本低但风险高&#xff0c…

2026/8/23 9:11:12