指针——数组(指针)传参

news2024/10/12 1:08:38

(一)前文问题答案解析

1、代码 int(*pa[10])[5] 的解析

某人:嗯,有*pa,这不很明显是个指针嘛,然后 [5] 说明是个数组指针,int类型,[10]。。。。

这这这,很明显不是指针。

首先:pa和[10]结合说明是个数组!!!   然后去掉数组名剩余 int(* )[5] 这不就是个数组指针的外层吗?所以真相就是类型为数组指针类型的数组

             能放十个数组指针,每一个指针又指向一个数组,指向的数组有五个元素

2、二维数组的打印,代码如下

#include<stdio.h>
void print1(int arr[3][4], int x, int y)//形参接收时采用数组的形式
{
	int i, j = 0;
	for (i = 0;i < x;i++)
	{
		for (j = 0;j < y;j++)
		{
			printf("% d", arr[i][j]);
		}
		printf("\n");
	}
}
void print2(int(*parr)[4], int x, int y)//使用数组指针接收
//这是因为二维数组的数组名也是首元素地址,但是其首元素的地址相当于一个有着四个元素的一维数组的地址,所以形参
//必须是数组指针
{
	int i, j = 0;
	for (i = 0;i < x;i++)
	{
		for (j = 0;j < y;j++)
		{
			printf("% d", (*(*parr+i)+j));//*parr+i就是找到第i行,然后加j找到第j列,
			                             //最后*解引用得出第ihang,j列的数值
		}
		printf("\n");
	}
}
int main()
{
	int arr[3][4] = { {1,2,3,4},{2,3,4,5},{3,4,5,6} };//首先定义一个二维数组
	print1(arr, 3, 4);//使用常规方法来打印
	print2(arr, 3, 4);//使用指针
	return 0;
}

(二)数组参数

(1)一维数组传参

int main()
{
    int arr1[10] = { 0 }; //定义一个数组
    int* arr2[20] = { 0 };//定义一个指针类型数组
    test1(arr1);//函数test1,实参为arr1
    test2(arr2);//函数test2,实参为arr2
    return 0;
}

思考:那么该如何写这两个函数呢?(无需具体内容,写出形参)

第一种:

void test1(int arr[])       //使用数组当形参,可以不写数组的大小
{
    //具体内容;
}
第二种:

void test1(int arr[10])   //使用数组当形参,可以写大小
{
   //具体内容 ;
}

第三种:
void test1(int* arr)    //使用指针当形参,指向的是数组首元素的地址
 {

   //具体内容  ;
}
//以上三种传参方式都是可以的

第一种:
void test2(int* arr2[])//使用数组当形参,可以写数组大小,也可以不写
{
   ;
}

第二种:
void test2(int** arr)//使用指针,此处为二级指针
{
    ;
}

(2)二维数组传参

第一种:

void test(int arr[3][5])// 使用数组当形参,只可以省略行不可以省略列,所以三可以省略
{
    ;
}
void test3(int(*arr)[5])//使用指针当形参,由于二维数组首元素是第一行的地址,其代表的也就是第一行数组的地址
// 所以形参指针需要写为指针数组的形式
{
    ;
}

int main()
{
    int arr[3][5] = { 0 };
    test3(arr);
    return 0;
}

(三)指针传参

void test(int* p)// 一级指针传参使用一级指针来接收
{
    ;
}
void test2(int** p2)// 二级指针使用二级指针来接收
{
    *p2; //取得的就是pa的地址

    **p2;//取得的就是a的地址
}
int main()
{
   int arr[10] = { 0 };
   int* p = arr;//定义一个指针指向数组
   test(p);
   //上述为一级指针传参

   int a = 10;
   int* pa = &a;//指针指向a的地址

   int** ppa = &pa;//指针ppa指向pa的地址,所以ppa就是二级指针
   test2(ppa);//也可以写为 test2(&pa)

   int* arr[10] = { 0 };//定义一个指针数组,每个元素为一个一级指针
   test2(arr);// 传参的时候传的就是首元素地址,也就相当于一级指针的地址,需要二级指针来接收
   return 0;
}
    指针传参简单的来说就是地址的接收,传过去的一级指针就用一级指针来接收

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【笔记】Day2.3.3自定义异常+2.3.4resource注入

此项目一共写了两个自定义异常 因为&#xff1a; 1.前后端交互的响应码&#xff08;如200&#xff0c;401&#xff09;大差不差 区别几乎只在于响应结果中的msg和code表达是否成功 2.而微服务的接口之间调用采用restful方式 状态码要使用标准的http状态码 如&#xff1a;200…

【Linux探索学习】第四弹——Linux权限管理详解:理解用户、组和权限之间的关系

前言&#xff1a; 在前面我们已经学习了Linux的基础指令&#xff0c;相信大家对Linux已经有了一定的认识&#xff0c;今天我们来学习Linux权限的相关知识点&#xff0c;Linux权限是Linux初学者必须要掌握的内容 目录 一、Linux下用户类型 二、权限基本概念 三、权限的表示 四…

SpringBoot整合web中使用jsp

1、在pom.xml文件中导入jsp依赖的jar包&#xff0c;一个是jstl标签&#xff0c;一个是jsp的引擎 <dependency><groupId>org.apache.taglibs</groupId><artifactId>taglibs-standard-spec</artifactId><version>1.2.5</version> <…

窗口售票系统1.0版本

本窗口售票系统实现了三个售票窗口的随机售票&#xff0c;实现随机到某一个窗口买票&#xff0c;总票余量都会减少&#xff0c;即三个窗口共享同一个票余量。若票余量小于一次性购票量&#xff0c;则提示报错&#xff1b;若车票售罄&#xff0c;则代码结束运行。 代码实现&…

代码随想录算法训练营第三十天|491. 非递减子序列,46. 全排列,47. 全排列 II,332. 重新安排行程,51. N 皇后,37. 解数独

491. 非递减子序列&#xff0c;46. 全排列&#xff0c;47. 全排列 II&#xff0c;332. 重新安排行程&#xff0c;51. N 皇后&#xff0c;37. 解数独 491. 非递减子序列46. 全排列47. 全排列 II332. 重新安排行程51. N 皇后37. 解数独 491. 非递减子序列 给你一个整数数组 nums…

技术成神之路:设计模式(二十)装饰模式

介绍 装饰模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许在不改变对象自身的情况下&#xff0c;动态地为对象添加额外的职责。这个模式通常用于增强或改变对象的功能。 1.定义 装饰模式通过创建一个装饰类&#xff0c;将功能动态地添加…

网站设计公司怎么评估?2024网站定制公司哪家好

在选择一家网站建设公司时&#xff0c;需要采取一些筛选方法来评估其能力和专业性。可以通过查看公司的案例展示、项目经验、团队规模等方面来评估公司的实力。同时&#xff0c;需要了解公司是否有与自己业务相似的项目经验&#xff0c;以便更好地满足自己的需求。在选择公司时…

win0删除 Windows.old

参考&#xff1a;https://blog.csdn.net/xitongzhijia_abc/article/details/126270452 win10如下所示&#xff1a; 打开 设置–>系统—>存储

Ps:PDF 演示文稿

Ps菜单&#xff1a;文件/自动/PDF 演示文稿 Automate/PDF Presentation PDF 演示文稿 PDF Presentation命令提供了创建 PDF 演示文稿的多种选项&#xff0c;用户可以添加当前打开的文件或手动选择文件&#xff0c;选择背景颜色、字体大小等&#xff0c;设置演示文稿的页面切换间…

哪个牌子充电宝性价比高?2024年精选性价比排行榜充电宝推荐

在数字化生活日益普及的今天&#xff0c;充电宝作为我们移动设备的“能量加油站”&#xff0c;其重要性不言而喻。无论是商务出行、旅行探险还是日常通勤&#xff0c;一款性价比高、安全可靠的充电宝都是不可或缺的伴侣。然而&#xff0c;面对市场上琳琅满目的充电宝品牌与型号…

芯课堂 | Synwit_UI_Creator(μgui)平台之图像处理篇

今天小编给大家介绍的是UI_Creator&#xff08;μgui&#xff09;平台下关于图像处理的选项。 UI_Creator&#xff08;μgui&#xff09;平台图片类控件有图像控件和分级图像控件&#xff0c;均包含以下选项&#xff1a; 1、消除水波纹&#xff1a; 由于16位真彩色&#xff08…

MySQL常用语句(二)

#数据修改 #insert insert语句用于将一行或多行插入到表中。insert语句的语法&#xff1a; 在insert into子句之后的括号内指定表名和逗号分隔列的列表&#xff0c;然后将括号内相应列的逗号分隔值放在values关键字之后。创建一个名为tasks的新表来练习insert语句&#xff1a…

火山引擎边缘智能×扣子,拓展AI Agent物理边界

9月21日&#xff0c; 火山引擎边缘智能扣子技术沙龙在上海圆满落地&#xff0c;沙龙以“探索端智能&#xff0c;加速大模型应用”为主题&#xff0c;边缘智能、扣子、地瓜机器人以及上海交大等多位重磅嘉宾出席&#xff0c;分享 AI 最新趋势及端侧大模型最新探索与应用实践。 …

C++继承深度剖析:从理论到实践的跨越

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C&#xff1a;由浅入深篇 小新的主页&#xff1a;编程版小新-CSDN博客 前言&#xff1a; 前面我们已经学了很多有关…

纠删码参数自适应匹配问题ECP-AMP实验方案(中)

6.方法设计 6.1.数据获取 为了收集不同的文件大小和纠删码参数对性能指标的影响&#xff0c;本文在Hadoop平台上进行了模拟实验。Hadoop是一种开源的分布式存储和计算框架&#xff0c;它可以支持不同类型的纠删码&#xff0c;并提供了一些应用程序接口和工具来测试和评估纠删…

Rstudio 绘制elecdaily的时序图与预测

&#xff08;1&#xff09;绘制上述数据的时序图并将温度作为解释变量对日度耗电量建模。为什么是它们之间是正向相关关系&#xff1f; head(elecdaily,20) %>% as.data.frame() %>% ggplot(aes(xTemperature, yDemand)) ylab("电量能耗 %") xlab("温度…

论文笔记:D-vlog 用于抑郁症检测的多模态数据集

整理了AAAI2022 D-vlog: Multimodal Vlog Dataset for Depression Detection 论文的阅读笔记 背景方法特征提取模型 实验数据集主实验不同模态的性能性别的影响 背景 以往关于抑郁症检测的工作大多集中在实验室环境下对抑郁症个体的检测&#xff0c;难以在实践中推广。本文提出…

Java之API

前言 这一篇讲API&#xff0c;有很多很多的API 1. Object 它是所有类的祖宗类&#xff0c;所以任何类都可以直接使用Object的一些方法 1.1 toString 从这个我们就可以看出&#xff0c;平时对s1的打印其实是默认调用了它的toString函数&#xff0c;因为toString是灰色的 但…

qt数据库的系统

pro文件 QT core gui sqlgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compiler). Plea…