当前课程知识点:C++语言程序设计基础 >  第6章 数组、指针与字符串(一) >  数组作为函数的参数 >  数组作为函数参数(例6-2)

返回《C++语言程序设计基础》慕课在线视频课程列表

数组作为函数参数(例6-2)在线视频

数组作为函数参数(例6-2)

l  数组元素作实参,与单个变量一样。

l  数组名作参数,形、实参数都应是数组名(实质上是地址,关于地址详见6.2),类型要一样,传送的是数组首地址。对形参数组的改变会直接影响到实参数组。

例6-2 使用数组名作为函数参数

主函数中初始化一个二维数组,表示一个矩阵,矩阵,并将每个元素都输出,然后调用子函数,分别计算每一行的元素之和,将和直接存放在每行的第一个元素中,返回主函数之后输出各行元素的和。

6-2 使用数组名作为函数参数

#include <iostream>

using namespace std;

void rowSum(int a[][4], int nRow) {

     for (int i = 0; i < nRow; i++) {

         for(int j = 1; j < 4; j++)

              a[i][0] += a[i][j];

     }

}

int main() {   //主函数

     //定义并初始化数组

  int table[3][4] = {{1, 2, 3, 4}, {2, 3, 4, 5}, {3, 4, 5, 6}};

 

6-2 使用数组名作为函数参数

 //输出数组元素

     for (int i = 0; i < 3; i++)  {

         for (int j = 0; j < 4; j++)

              cout << table[i][j] << "   ";

         cout << endl;

     }

     rowSum(table, 3);     //调用子函数计算各行和

  //输出计算结果

     for (int i = 0; i < 3; i++) 

         cout << "Sum of row " << i << " is " << table[i][0] << endl;

     return 0;

}

 


下一节:对象数组

返回《C++语言程序设计基础》慕课在线视频列表

数组作为函数参数(例6-2)课程教案、知识点、字幕

大家好

欢迎回来继续学习

C++语言程序设计

这一节我们来学习

如何用数组作为函数的参数

来传递

如果用数组元素做实参

那就其实跟单个变量是一样的

数组元素没办法又做形参

形参的话你想

都没有办法去定义说

我只要一个数组元素做形参

语法上就没有提供这种可能性

所以大家就不用去考虑这个问题

但是我们可以用数组元素

做实参的

就是需要一个变量的地方

我们都可以给一个数组元素

它跟单个变量作用是一样的

那么更多情况下呢

我们会用数组名来做参数

这个时候语法要求

形参 实参都是数组名

实际上我们稍后在这一章中

学了地址 学了指针

大家就明白了

传递数组名

实际上传的是地址

但是这个是后话

我们现在呢

先按照语法的要求去理解

要求形参 实参都是数组名

类型也要一样

传送的是数组的首地址

那这样的话

由于传送的是地址

所以我们在函数中

如果对形参数组

它的元素进行了改变的话呢

是立刻直接影响到实参数组的

那么这样一个机制呢

有的时候它是有用的

是好的

我们可以用这样的方式呢

带回运算结果

也就是达到双向传递

有的时候呢

又是我们要避免的副作用

大多数时候

我们传数组给函数去处理

并不希望

它把我们原本传过去的这个实参

给修改了

只是希望它能用这里面的数据

参与计算就好

所以这个时候呢

我们就可以传一个常数组过去

下面呢

我们就来看一个

用数组名做参数的例子

这个例题定义了一个函数

专门用来求数组每一行的和

在主函数中

定义并且初始化好了

一个二维数组

把这个数组名作为参数

传给子函数

由子函数去计算每一行的和

那么也就是说

一个比如说三行的数组

它计算出来就有三个结果

怎么样能够带回主函数中

这道题要求将和直接存在

数组的首元素中

那么这样就能带回主函数了吗

我们运行这个程序

看一看效果

我们看到这是这个求

数组各行和的函数

这个函数定义的是

相对比较通用一点

这个它定义的数组形参呢

是有四列

但是行数不确定

也就是说

你调用的时候给的实参

多少行都可以

限制是四列就行

然后由于行数不确定

我们又需要通过循环

一行一行地处理这个数据

所以循环控制变量里面

肯定需要这种行

这个因素来控制循环结束条件

所以我们还要单独将数组的行数

作为一个参数传进来

在主函数中呢

我们这儿定义好了一个数组

我们进到主函数里面看一下

定义并且初始化好

一个数组以后呢

输出这个数组

这个for循环呢

就是输出数组元素

二维数组往往是用两重循环

来处理的

外层是行循环

内层是列循环

这样先行循环

在每一行中

循环处理每一列的元素

这样就把整个二维表格的元素

都输出了

验证一下我们是不是

正确的初始化好了

好 我们就不单步去做循环了

一下把这个

输出这部分运行完

f5到下一个断点的地方

然后我们看输出的内容

确实是正确的

是我们初始化的值

接下来呢

再追踪到函数里面去

我们看到在函数里面

也是一个两重循环

用来处理整个数组的元素

外层是行循环

在每一行中呢

再用一个for循环

去累加这一行的各列的值

累加的和都放在行首元素里面

现在经过整个for循环以后

我们走到下一个断点的位置

也就是rowSum函数结束的位置

形参数组a

它的行首元素全部都被修改了

也就是累加和都放在这儿了

现在再回到主函数

回到主函数以后

这里我们又用一个循环语句

去输出每一行的行首元素

看看跟原来的是不是有区别

我们的累加和是不是带回来了

这样我们把断点

设在程序最后的地方

让它完成这个for循环以后

好 现在程序执行到这儿来

我们看输出这个命令行窗口

的确

刚刚我们在子函数中看到的

计算出的每一行的和

放到行首元素中以后呢

回到主函数中

输出主函数中

table数组的行首元素

是一样的

所以数组实际上

它就是

数组名就是数组的首地址

我们用数组名做实参

就是将主函数中

已经定义好的这个数组

它的首地址传给了

函数rowSum

表面上看起来

形参是一个同结构的数组

实际上

它就是接收了一个首地址

所以呢

在rowSum中我们操作数组a

就相当于

直接操作了主函数里面的

数组table

对于这个数组a的

任何一个细微地修改

实际上是直接作用于主函数中

数组table里面的

所以我们看到

将所有行的和

存在各行的行首元素中以后

回到主函数

主函数中table数组的

每行的行首元素也变化了

变成各行的数据之和了

C++语言程序设计基础课程列表:

第1章 绪论

-导学

--第1章导学

-计算机系统简介

--计算机系统简介

--计算机系统简介 测试题

-计算机语言和程序设计方法的发展

--计算机语言和程序设计方法的发展

--计算机语言和程序设计方法的发展 测试题

-面向对象的基本概念

--面向对象的基本概念

--面向对象的基本概念 测试题

-程序的开发过程

--程序的开发过程

--程序的开发过程 测试题

-信息的表示和储存

--计算机中的信息与存储单位

--计算机的数字系统

--数据的编码表示

--信息的表示和储存 测试题

-实验指导

--实验一:VS开发环境介绍

第2章 C++简单程序设计(一)

-导学

--第二章导学

-C++语言概述

--C++的特点和程序实例

--C++字符集和词法记号

--C++语言概述 测试题

-基本数据类型、常量、变量

--基本数据类型、常量、变量

--程序举例

--基本数据类型、常量、变量 测试题

-运算与表达式

--算术运算与赋值运算

--逗号运算、关系运算、逻辑运算和条件运算

--Sizeof运算、位运算

--运算优先级、类型转换

--运算与表达式 测试题

-实验二:简单程序设计(上)

--实验二:简单程序设计(上)

第2章 C++简单程序设计(二)

-数据的输入和输出

--数据的输入和输出

--数据的输入和输出 测试题

-选择结构

--if语句

--switch语句

--选择结构 测试题

-循环结构

--循环结构——while语句

--do-while语句

--for语句

--嵌套的控制结构、其他控制语句

--循环结构 测试题

-自定义类型

--自定义类型

--自定义类型

-第2章小结

--第二章小结

-实验二:C++简单程序设计(下)

--实验二C++简单程序设计(下)

第3章 函数

-导学

--导学

-函数定义

--函数定义

--函数定义 测试题

-函数调用

--函数调用(例3-1)

--例3-2

--例3-3

--例3-4

--例3-5

--例3-6

--函数调用 测试题

-嵌套与递归

--函数的嵌套调用(例3-7)

--函数的递归调用(例3-8)

--例3-9

--例3-10

--嵌套与递归 测试题

-函数的参数传递

--函数的参数传递

--函数的参数传递 测试题

-引用类型

--引用类型(例3-11)

--引用类型 测试题

-含有可变参数的函数

--含有可变参数的函数

--含有可变参数的函数 测试题

-内联函数

--内联函数(例3-14)

--内联函数 测试题

-constexpr函数

--constexpr函数

--CONSTEXPR函数课后习题

-带默认参数值的函数

--带默认参数值的函数

--默认参数值例(3-15)

--带默认参数值的函数 测试题

-函数重载

--函数重载(例3-16)

--函数重载 测试题

-C++系统函数

--C++系统函数(例3-17)

--C++系统函数习题

-第3章小结

--第三章小结

-实验三(上)函数的应用

--实验三(上)函数的应用

-实验三(下)函数的应用

--实验三(下)函数的应用

第4章 类与对象

-导学

--导学

-面向对象程序的基本特点

--面向对象程序的基本特点

--面向对象程序的基本特点 测试题

-类和对象

--类和对象的定义

--类和对象的程序举例

--类和对象 测试题

-构造函数

--构造函数基本概念

--构造函数例题(1)——例4-1

--构造函数例题(2)——例4-2

--委托构造函数

--复制构造函数

--复制构造函数调用举例

--构造函数 测试题

-析构函数

--析构函数

--析构函数 测试题

-类的组合

--类的组合

--类的组合程序举例

--前向引用声明

--类的组合 测试题

-UML简介

--UML简介

--UML简介课后习题

-结构体与联合体

--结构体(例4-7)

--联合体(例4-8)

--结构体与联合体 测试题

-枚举类

--枚举类

--枚举类 测试题

-第4章小结

--第四章小结

-实验四(上)

--实验四(上)

-实验四(下)

--实验四(下)

第5章 数据的共享与保护

-导学

--导学

-标识符的作用域与可见性

--标识符的作用域与可见性

--标识符的作用域与可见性 测试题

-对象的生存期

--对象的生存期

--对象的生存期 测试题

-类的静态成员

--静态数据成员(例5-4)

--静态函数成员(例5-5)

--类的静态成员 测试题

-类的友元

--类的友元(例5-6)

--类的友元 测试题

-共享数据的保护

--共享数据的保护(例5-7)

--共享数据的保护 测试题

-多文件结构和预编译命令

--多文件结构和预编译命令(例5-10)

--多文件结构和预编译命令 测试题

-第5章小结

--小结

-实验五

--实验五

第6章 数组、指针与字符串(一)

-导学

--导学

-数组的定义与初始化

--数组的定义与使用

--数组的储存与初始化

--一维数组应用举例

--数组的定义与初始化 测试题

-数组作为函数的参数

--数组作为函数参数(例6-2)

--数组作为函数的参数 测试题

-对象数组

--对象数组

--对象数组 测试题

-基于范围的for循环

--基于范围的for循环

-指针的定义和运算

--指针的概念、定义和指针运算

--指针的初始化和赋值

--指针的算术运算、关系运算

--指针的定义和运算 测试题

-综合实例

--综合实例

-实验六(上)

--实验六上

第6章 数组、指针与字符串(二)

-指针与数组

--用指针访问数组元素

--指针数组

--指针与数组 测试题

-指针与函数

--以指针作为函数参数

--指针类型的函数

--指向函数的指针

--指针与函数 测试题

-对象指针

--对象指针

--对象指针 测试题

-动态内存分配

--动态分配与释放内存

--申请和释放动态数组(一)

--申请和释放动态数组(二)

--动态内存分配 测试题

-智能指针

--智能指针

-vector对象

--vector对象

--vector对象 测试题

-对象复制与移动

--深层复制与浅层复制

--移动构造

--对象复制与移动 测试题

-字符串

--C风格字符串

--string类

--字符串 测试题

-第6章小结

--第六章小结

-综合实例

--综合实例

-实验六(下)

--实验六(下)

数组作为函数参数(例6-2)笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。