C语言详解:数组指针

数组指针是指针

int* p[10]  这是指针数组的写法 ,因为【】的优先级比*高,

所以为了解决优先级问题,加()

int(* p)[10]=&arr;//数组的地址要存起来

说明p是指针(首先与*结合),指向的类型是int[10],指向的是数组

int  main()
{int* p = NULL;//p是整形指针-指向整形的指针-可以存放整形的地址char* pc = NULL;//pc是字符指针-指向字符的指针-可以存放字符的地址//数组指针-指向数组的指针-可以存放数组的地址int arr[10] = { 0 };//arr -首元素地址//&arr[0]-首元素地址//&arr-数组的地址  刚好可以用数组指针存放int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int(* p)[10]=&arr;//数组的地址要存起来return 0;
}

下面的代码如何理解呢? 

int main()
{char* arr[5];char(*pa)[5] = &arr;//错了char* (*pa)[5] = &arr;//正确
}

解释一下,arr是指针数组,五个元素是指针,&arr之后,拿到的是数组的地址,所以要用指针数组,但是数组的类型是什么呢?是char*,为啥呢,比如int arr【5】,arr 5个元素是int 型,而我arr的元素是char*的类型。

指针数组改怎么用呢?

在一维数组的用法,代码如下,可以看到用起来很复杂啊,解释一下,*pa=arr;就是首元素地址,首元素地址加i就拿到各个地址,然后解引用,也可以按数组的表示来

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

对比一下:直接用指针写的话,可以看出代码简单很多,所以二维数组的使用一般用于二维数组以上才OK

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

我们之前学过为二维数组的打印,下面代码就是最基本的方法,下面我们要用二维数组进行打印 

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

arr是数组名,即首元素地址,我们知道,二维数组可以看成一维数组,所以二维数组的首元素地址不是第一行第一列的元素的地址,而是第一行元素的地址。也就是一个一维数组的地址,,对于一个数组的地址,我们可以用指针数组来指向。

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

*(p+i)就可以拿到每一行的地址,每一行的地址再加j,就可以得到每一个元素的地址。再解引用。当然也可以用数组的表示方法来

printf("%d ", (*(p + i))[j]);

可以参考一下一维数组的方式来理解。其实表示方式还是有很多种的,

arr[i]==*(arr+i)==*(p+i)==p[i]

自己可以在琢磨一下, 

printf("%d ", p[i][j]);
printf("%d ", *(p[i]+j);

最后,解释一下 int(*parr3[10])[5] 代表什么意思。

parr3首先与【】结合,说明是数组,数组的类型是int(*)【5】,就是我们本节学的指针数组,

说明该数组有10个元素,每个元素是一个数组指针,该数组指针指向的数组右5个元素,每个元素的类型是int 型。

画图解释一下:

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

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

相关文章

走进开源,拥抱开源

走进开源&#xff0c;拥抱开源 一、开源文化1.1 什么是开源1.2 为什么要开源1.3 有哪些开源协议 二、选择开源2.1 开源社区的类型与特点2.2 如何选择开源社区2.3 如何选择开源项目 三、参与开源3.1 开源社区的参与方式3.2 开源项目的参与方式 四、Apache Doris 参与示例4.1 Dor…

几个排序器的verilog及其资源占用、延时分析

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 因为课题需要&#xff0c;调研了几个快速排序方法&#xff0c;并手写或者改进了若干待测试对象&#xff0c;包括记分板型冒泡排序&#xff08;这个是别人的&#xff09…

1、sql server数据库进行sql注入

靶机取自&#xff1a;墨者sql server 1、判断数据库类型 抓包知sql server&#xff0c;所以注入语句跟MySQL有些区别 2、判断注入点 “http://219.153.49.228:42514/new_list.asp?id2 ”&#xff0c;当id2 and 11时显示正确&#xff0c;id2 and 12时页面报错。 3、确定列…

基于单片机的智能安防系统设计(32+4G+WIFI版)-设计说明书

设计摘要&#xff1a; 本设计基于STM32单片机&#xff0c;旨在实现一个智能安防系统&#xff0c;主要包括烟雾和温度传感器、人体红外传感器、显示屏、按键、4G模块和WiFi模块等组件。通过这些组件的协作&#xff0c;实现了火灾检测、入侵监测、状态显示、用户交互和远程通信等…

软件工程期末复习(8)需求的表达方法和状态转换图

需求的表达方法 系统模型 需求分析的任务就是借助于当前系统的逻辑模型导出目标系统的逻辑模型&#xff0c;解决目标系统 “做什么” 的问题 通常软件开发项目是要实现目标系统的物理模型。目标系统的具体物理模型是由它的逻辑模型经实例化&#xff0c;即具体到某个业务领域而…

pytest教程-47-钩子函数-pytest_sessionfinish

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest_sessionstart钩子函数的使用方法&#xff0c;本小节我们讲解一下pytest_sessionfinish钩子函数的使用方法。 pytest_sessionfinish 钩子函数在 Pytest 测试会话结束时调用&#xff0c;…

Java入门基础学习笔记23——For循环结构

1、for循环&#xff1a; 控制一段代码反复执行很多次。 2、For循环语句的基本结构&#xff1a; for(初始化表达式&#xff1b;判断表达式&#xff1b;递增&#xff08;递减&#xff09;表达式&#xff09; {循环体语句&#xff08;重复执行的代码&#xff09; } 例&#xff1…

大模型日报2024-05-15

大模型日报 2024-05-15 大模型资讯 OpenAI推出全新AI模型GPT-4o&#xff0c;具备文本、图像和音频处理能力 摘要: OpenAI公司继ChatGPT后&#xff0c;最新推出了名为GPT-4o的AI模型。这一模型不仅能够理解和生成文本&#xff0c;还新增了图像和音频的解释及生成功能。GPT-4o作为…

【前端】CSS基础(3)

文章目录 前言1. CSS常用元素属性1.1 字体属性1.1.1 字体1.1.2 字体大小1.1.3 字体颜色1.1.4 字体粗细1.1.5 文字样式 前言 这篇博客仅仅是对CSS的基本结构进行了一些说明&#xff0c;关于CSS的更多讲解以及HTML、Javascript部分的讲解可以关注一下下面的专栏&#xff0c;会持续…

原地去重问题和合并有序数组问题

原地去重问题 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。这是leetcode上的一道题 这里我们用…

【qt】一次性讲清楚日期和时间

时间日期 一.QTime类1.初始化2.获取当前时间3.获取 小时 分钟 秒 毫秒4.增加时间5.间隔时间6.字符串转时间7.时间转字符串 二.QDate类1.初始化2.获取当前日期3.设置日期4.获取 年 月 日5.各种小接口6.增加日期7.日期间隔8.字符串转日期9.日期转字符串 三.QDateTime类1.初始化2.…