C++关于数组作为函数参数的值传递和指针传递

article/2025/9/14 21:14:38

明确:
数组作为函数参数和普通的参数是有区别的;

函数中普通的参数

如同void insert(int a,int b)之类的传递分为3种方式传递

  • 值传递
  • 指针传递,指针值的传递,
  • 引用传递,它们的参数的传递是将实参的值赋给形参。

而数组作为函数参数传递:

而数组作为函数参数传递,值传递就是指针地址的传递,而这就与普通参数不一样了;因为数组的数据太多了,将其一一赋值既麻烦又浪费空间,所以数组作为参数传递给函数的只是数组首元素的地址,函数在需要用到后面元素时再按照这个地址和数组下标去查找。所以,函数调用的数组会对本身的数组造成影响,这点和普通参数的值传递是不同的。

同时,**作为函数形参的数组和指针可以互换,这种转换仅限于函数形参的声明。**这是一种便利,传递时数组会蜕变为指针,事实上数组从来没有传入过函数。

eg:以下2个声明是等价的

 void insert(int * arr);void insert(int arr[]);

调用:

insert(arr);

注意:因为传入数组名时,数组名代表的就是数组的首地址,所以数组名是不可以用“&”符来取别名的,即当数组作为函数参数进行传递时,不可以使用引用类型进行传递
在这里插入图片描述

且数组长度不是参数类型的一部分。函数和编译器都不知道传统给它的数组的长度的大小。——所以我们将数组作为函数参数进行传递时会另外再传入一个数组长度;

编程时的一些代码示例:

//排序函数1————数组值传递
void sortHero(Hero heroArr[],int len) {for (int i = 0; i < len-1; i++) {for (int j = 0; j < len - 1 - i; j++) {if (heroArr[j].age > heroArr[j + 1].age) {Hero temp = heroArr[j];heroArr[j] = heroArr[j + 1];heroArr[j + 1] = temp;}}}
}
//排序函数2————数组地址传递
void sortHero(Hero * heroArr, int len) {for (int i = 0; i < len - 1; i++) {for (int j = 0; j < len - 1 - i; j++) {if (heroArr[j].age > heroArr[j + 1].age) {Hero temp = heroArr[j];heroArr[j] = heroArr[j + 1];heroArr[j + 1] = temp;}}}
}
//调用:
int len = sizeof(heroArr) / sizeof(heroArr[0]);
sortHero(heroArr, len);
因为数组长度不是参数类型的一部分。函数和编译器都不知道传统给它的数组的长度的大小。==——所以我们将数组作为函数参数进行传递时会另外再传入一个数组长度len;

http://chatgpt.dhexx.cn/article/33WQ2Wvc.shtml

相关文章

详谈C++中数组作为函数参数

一、一个例子引发的思考 运行以下代码&#xff0c;请问输出是什么&#xff1f;例子来源于《剑指Offer》&#xff0c;我对书上例子做了修改&#xff0c;让其可以运行。 #include<iostream> using namespace std;int GetSize(int data[]) {return sizeof(data); } int mai…

易懂的数组作为函数参数(C语言)

易懂的数组作为函数参数&#xff08;C语言&#xff09; 目录 易懂的数组作为函数参数&#xff08;C语言&#xff09;1、数组做函数参数2、通过形参数组修改数组元素3、数组排序 1、数组做函数参数 &#xff08;1&#xff09;、若将一个数组作为实际参数传递给函数&#xff0c;…

以数组作为函数参数的函数调用

调用有参函数时需要提供实参&#xff0c;实参可以是常量&#xff0c;变量或者表达式&#xff0c;数组元素就相当于变量&#xff0c;因此数组元素可以用作函数实参&#xff0c;但是不能用作函数形参&#xff08;因为在函数被调用时临时分配存储单元&#xff0c;不可能为一个数组…

数组作为函数参数传递

数组作为函数参数传递 数组作为函数参数传递时&#xff0c;传入的是数组首地址&#xff0c;并非数组本身。今天总算理解了这一点。写了一个打印数组元素的函数&#xff0c;代码如下&#xff1a; void print1(int arr[]) {int len sizeof(arr) / sizeof(arr[0]);cout <<…

C++之数组作为函数参数

好消息&#xff0c;好消息&#xff0c;数组也可当参数啦&#xff01;&#xff01;&#xff01; 长这样&#xff0c; void arr(int a[])还挺好看&#xff08;生平第一次夸代码/狗头/&#xff09; 众所周知&#xff0c;变量可以当参数&#xff0c;但是数组当参数的话只能被认为…

C语言 数组作为函数参数

1、数组元素作为函数实参 int a[10]; //相当于定义了10个变量&#xff0c;a[0]~a[9]&#xff0c;那么数组元素就是&#xff1a;a[0]~a[9]&#xff0c;数组元素就可以当成变量使用。 #include<stdio.h> //函数声明 int whichmax(int x,int y); int main() {int a[10];a[1…

数组元素作为函数参数

数组元素作为函数参数 数组元素作为函数参数数组元素作函数实参数组名作为函数参数 数组元素作为函数参数 数组可以作为函数的参数使用&#xff0c;进行数据传送。数组用作函数参数有两种形式&#xff0c;一种是把数组元素(下标变量)作为实参使用&#xff1b;另一种是把数组名…

将数组作为函数参数调用

数组与单个元素一样&#xff0c;也可以作为参数被函数调用&#xff0c;但其用法与单个元素调用存在不同。 对于单个元素调用&#xff0c;如不使用引用&或者指针&#xff0c;则在函数中对形参的操作不会反映到实参上&#xff0c;即实参不会发生改变&#xff0c;具体用法详见…

零基础入门学习C语言008讲:函数(4)

8.&#xff17;数组作为函数参数 数组可以作为函数的参数使用&#xff0c;进行数据传送。数组用作函数参数有两种形式。 一种是把数组元素(下标变量)作为实参使用&#xff1b; 另一种是把数组名作为函数的形参和实参使用。 8.7.1 数组元素作函数实参 数组元素就是下标变量…

数组做函数的参数

&#xff11; 一维数组做参数 数组作为函数的参数&#xff0c;是指以数组名作为实际参数传递给函数。用数组名做函数参数时&#xff0c;不是进行直接的值传递&#xff0c;而是地址的传送&#xff0c;也就是把实参数组的首地址赋予形参数组名。 比如&#xff0c;下面声明了一个…

顺序表的基本操作代码实现

顺序的基本操作代码实现&#xff08;初始化、插入、删除、销毁等等&#xff09; 1.标头.h #pragma once #include<stdio.h> #include<stdlib.h> /*author:W.yuData:2020-04-27 */#define INITSIZE 10 //定义顺序表的初始最大长度typedef struct {int* data; //顺…

数据结构实验报告:顺序表基本操作的实现

1、实验目的 &#xff08;1&#xff09;领会线性表顺序存储结构的特点。 &#xff08;2&#xff09;掌握线性表顺序存储结构的常见算法。 2、实验具体要求 &#xff08;1&#xff09;建立顺序表存储数据序列&#xff08;10&#xff0c;20&#xff0c;30&#xff0c;40&…

顺序表基本操作的实现

实验一 顺序表基本操作的实现 一、实验学时&#xff1a; 2学时 二、实验目的 实现顺序表的基本操作 三、实验内容 顺序表的建立、取指定元素、返回指定元素位置顺序表中插入新元素、删除指定元素操作的实现 四、主要仪器设备及耗材 硬件&#xff1a;计算机一台软件&…

数据结构学习笔记——顺序表的基本操作(超详细最终版+++)建议反复看看ヾ(≧▽≦*)o

目录 前言一、顺序表的相关知识点二、顺序表的定义三、顺序表的初始化四、顺序表的建立五、顺序表的输出六、顺序表的逆序输出七、顺序表的插入操作八、顺序表的删除操作九、顺序表的按位和按值查找基本操作的完整代码十*、顺序表删除的常用操作十一*、顺序表的常用合并操作 前…

数据结构:顺序表的基本操作

线性表的顺序存储顺序表的线性存储示意图C语言定义线性表的顺序存储结构顺序表的基本操作顺序表的基础操作完整代码 线性表的顺序存储 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素&#xff0c;使得线性表在逻辑结构上相邻的元素存储在连续的物…

顺序表的基本操作(C语言)

1.要求 编程实现顺序表的基本操作&#xff0c;并设计一个菜单调用。 ①建立&#xff08;初始化&#xff09;、遍历、取值、查找、插入、删除 ②判空、求元素个数、前驱、后继、置为空表、销毁 2.分析 我们需要去定义一个结构体&#xff08;以下代码的结构体名为SqList),其…

C语言实现顺序表基本操作

1.顺序表初始化 2.顺序表创建 3.求顺序表的长度 4.判断顺序表是否为空 5.向顺序表中插入元素 6.删除顺序表中元素 7.将顺序表翻转 8.将顺序表降序排序 #include<stdio.h> #define MAXSIZE 100//定义顺序表的最大存储个数 typedef struct SqList {int *base;int l…

顺序表基本操作

文章目录 1. 顺序表插入元素2. 顺序表删除元素3. 顺序表查找元素4. 顺序表更改元素 1. 顺序表插入元素 向顺序表中插入数据元素&#xff0c;根据插入位置的不同&#xff0c;可分为以下 3 种情况&#xff1a; 插入到顺序表的表头&#xff1b;在表的中间位置插入元素&#xff1…

顺序表的基本操作

一、实验目的&#xff1a; 1、复习C语言程序设计中的知识。 2、掌握线性表的顺序存储结构的表示和实现方法。 3、掌握顺序表基本操作的算法实现。 二、实验内容&#xff1a; 1&#xff0e;建立顺序表。 2&#xff0e;在顺序表上实现插入、删除和查找等操作。 三、实验要求…

数据结构-顺序表基本操作的实现(含全部代码)

今天起开始编写数据结构中的各种数据结构及其算法的实现。 主要依据严蔚敏版数据结构教材以及王道数据结构考研辅导书。 今天是线性表中的顺序表的实现&#xff0c;主要实现函数如下&#xff0c;读者有需要可以评论&#xff0c;我可以适当加几个。 CreateList(SqList &L…