C第六章数组指针与字符串
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Hale Waihona Puke Baidu
unsigned int 限定数组元素 个数
面向对象程序设计
1
第1页/共56页
数组
数组的引用
➢引用数组元素:可以出现在简单变量能出现的 任何地方,如,赋值、输入、输出、基本运算
➢格式:
数组名[下标1] [下标2]… 整常数
整型变量
score[2] score[i]
int a[n]; 下标取值范围为:
=> int ba[5]={1,2,3,70,60};
面向对象程序设计
5
第5页/共56页
数组
实例分析
1、分析程序的运行结果 2、填空
#include <iostream> using namespace std; void main() { int A[5],B[5];
for(int i=0;i<5;i++ ) {
a[1][0]、a[1][1]、a[1][2]
a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
面向对象程序设计
4
第4页/共56页
数组
数组的初始化
➢ 初始化:声明数组时给全部或部分数组元素赋 初值
✓ 基本类型数组:给数组元素赋值 ✓ 对象数组:调用构造函数
double avrg( int n,int a[] ) {
double x=0.0; for(int i=0;i<n;i++)
x+=a[i]; return x/n; }
1、分析程序的运行结果 2、填空
void main() {
int a[3]={2,7,10}, b[5]={3,12,5,6,8}; cout<<avrg(3,a)<<", " <<avrg(5,b)<<endl; }
0~n-1
整型表达式 score[2+i] 整型数组元素 score[num [2]] 值为整数的函数 score[max(i,j)]
面向对象程序设计
2
第2页/共56页
数组
数组的存储
➢ 一维数组元素在内存中顺序、连续存储
✓ 数组元素在内存中占据一组连续的存储单元 ✓ 逻辑上相邻的元素在物理地址上也是相邻的 ✓ 数组名是数组首元素的内存首地址 eg:int a[3] 数组元素为:a[0]、a[1]、a[2]
A[i]=i*2-1; B[5-i-1]=A[i]; }
for( int i=0;i<5;i++ ) {
cout<<"A["<<i <<"]="<<A[i]; cout<<" B["<<i<<"]="
<<B[i]<<endl; } }
面向对象程序设计
6
第6页/共56页
数组
数组作为函数参数
➢ 函数的参数传递方式
数组
数组的声明
➢ 格式 数据类型 数组名 [常量表达式 1] [常量表达式2 ]. . .
整型、浮 点型、自 定义类型
数组名:常量 ,代表数组元 素在内存中的 起始地址
➢eegg:i:nt ain[5t ][a3[]1;0];
有✓151?0个个元元素素,,a[0],a[1]……a[ 9?] a[0][0],a[0][1]……a[?4 ][?3 ]
a[0]
数组在内存的首地址:a 或 ?
a[1]
为数组a分配的连续的存储单元
a[2]
面向对象程序设计
3
第3页/共56页
数组
数组的存储
➢ 二维数组元素在内存按行存放
✓ 相当于一个两行三列的矩阵 ✓ 先放第一行,再放第二行…… ✓ 每行元素按列下标由小到大顺次存放
eg:int a[2][3] 数组元素为:a[0][0]、a[0][1]、a[0][2]、
✓ 值传递:函数调用时,为形参分配单元,并将实参 的值复制到形参中;调用结束,形参单元被释放, 实参单元仍保留并维持原值
– 特点:形参与实参占用不同的内存单元; “单向”传递
✓ 地址传递:函数调用时,将数据的存储地址作为参 数传递给形参
– 特点:形参与实参占用同样的存储单元; “双向”传递
面向对象程序设计
面向对象程序设计
10
第10页/共56页
数组
对象数组
➢ 数组元素是同一个类的对象的数组 ➢ 声明
✓ 类名 数组名[下标表达式] eg: Date dates[7];
➢ 引用
✓ 数组名[下标].成员名 eg: dates[2].year;
➢ 初始化
✓ 调用构造函数对每个元素初始化
12、如声 果明声数明组数时组,时给 ,每 没个 指元 定素 初初 始值,则调用形 默参 认类构型造匹函配数的构造函数 Date d[2]={Date(2010,10,11),}Date(2010,9,20)}
7
第7页/共56页
数组
数组作为函数参数
➢ 数组元素和数组名都可作为函数的参数
✓ 数组元素做实参:值传递 ✓ 数组名做实参:地址传递
– 实参和形参都应该是数组名 – 形参数组和实参数组的首地址重合
面向对象程序设计
8
第8页/共56页
数组
实例分析一
#include <iostream> using namespace std;
123、在给定定 数 义义 组 数数 的 组组前时时几不对个指数元定组素数中赋组的初全值长部,度元,其素 而余赋 用元初 花素值 括自 动号初中始 的e化 初g:为 值in个0t 数a[决5]定=数{1组,2长,3度,7,6};
eg:int ba[]5=]={1{,12,,23,,37},6; };
面向对象程序设计
9
第9页/共56页
数组
1、分析程序的运行结果 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];
} }
void main( ) { int Table[3][4] =
{{1,2,3,4},{2,3,4,5},{3,4,5,6}}; for (int i=0; i<3; i++) { for (int j=0; j<4; j++)
cout<<Table[i][j]<< " "; cout<<endl; } RowSum( Table,3 ); for ( i = 0; i < 3; i++) cout<<"sum of row "<<i<<":"<<Table[i][0]<<endl; }
unsigned int 限定数组元素 个数
面向对象程序设计
1
第1页/共56页
数组
数组的引用
➢引用数组元素:可以出现在简单变量能出现的 任何地方,如,赋值、输入、输出、基本运算
➢格式:
数组名[下标1] [下标2]… 整常数
整型变量
score[2] score[i]
int a[n]; 下标取值范围为:
=> int ba[5]={1,2,3,70,60};
面向对象程序设计
5
第5页/共56页
数组
实例分析
1、分析程序的运行结果 2、填空
#include <iostream> using namespace std; void main() { int A[5],B[5];
for(int i=0;i<5;i++ ) {
a[1][0]、a[1][1]、a[1][2]
a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
面向对象程序设计
4
第4页/共56页
数组
数组的初始化
➢ 初始化:声明数组时给全部或部分数组元素赋 初值
✓ 基本类型数组:给数组元素赋值 ✓ 对象数组:调用构造函数
double avrg( int n,int a[] ) {
double x=0.0; for(int i=0;i<n;i++)
x+=a[i]; return x/n; }
1、分析程序的运行结果 2、填空
void main() {
int a[3]={2,7,10}, b[5]={3,12,5,6,8}; cout<<avrg(3,a)<<", " <<avrg(5,b)<<endl; }
0~n-1
整型表达式 score[2+i] 整型数组元素 score[num [2]] 值为整数的函数 score[max(i,j)]
面向对象程序设计
2
第2页/共56页
数组
数组的存储
➢ 一维数组元素在内存中顺序、连续存储
✓ 数组元素在内存中占据一组连续的存储单元 ✓ 逻辑上相邻的元素在物理地址上也是相邻的 ✓ 数组名是数组首元素的内存首地址 eg:int a[3] 数组元素为:a[0]、a[1]、a[2]
A[i]=i*2-1; B[5-i-1]=A[i]; }
for( int i=0;i<5;i++ ) {
cout<<"A["<<i <<"]="<<A[i]; cout<<" B["<<i<<"]="
<<B[i]<<endl; } }
面向对象程序设计
6
第6页/共56页
数组
数组作为函数参数
➢ 函数的参数传递方式
数组
数组的声明
➢ 格式 数据类型 数组名 [常量表达式 1] [常量表达式2 ]. . .
整型、浮 点型、自 定义类型
数组名:常量 ,代表数组元 素在内存中的 起始地址
➢eegg:i:nt ain[5t ][a3[]1;0];
有✓151?0个个元元素素,,a[0],a[1]……a[ 9?] a[0][0],a[0][1]……a[?4 ][?3 ]
a[0]
数组在内存的首地址:a 或 ?
a[1]
为数组a分配的连续的存储单元
a[2]
面向对象程序设计
3
第3页/共56页
数组
数组的存储
➢ 二维数组元素在内存按行存放
✓ 相当于一个两行三列的矩阵 ✓ 先放第一行,再放第二行…… ✓ 每行元素按列下标由小到大顺次存放
eg:int a[2][3] 数组元素为:a[0][0]、a[0][1]、a[0][2]、
✓ 值传递:函数调用时,为形参分配单元,并将实参 的值复制到形参中;调用结束,形参单元被释放, 实参单元仍保留并维持原值
– 特点:形参与实参占用不同的内存单元; “单向”传递
✓ 地址传递:函数调用时,将数据的存储地址作为参 数传递给形参
– 特点:形参与实参占用同样的存储单元; “双向”传递
面向对象程序设计
面向对象程序设计
10
第10页/共56页
数组
对象数组
➢ 数组元素是同一个类的对象的数组 ➢ 声明
✓ 类名 数组名[下标表达式] eg: Date dates[7];
➢ 引用
✓ 数组名[下标].成员名 eg: dates[2].year;
➢ 初始化
✓ 调用构造函数对每个元素初始化
12、如声 果明声数明组数时组,时给 ,每 没个 指元 定素 初初 始值,则调用形 默参 认类构型造匹函配数的构造函数 Date d[2]={Date(2010,10,11),}Date(2010,9,20)}
7
第7页/共56页
数组
数组作为函数参数
➢ 数组元素和数组名都可作为函数的参数
✓ 数组元素做实参:值传递 ✓ 数组名做实参:地址传递
– 实参和形参都应该是数组名 – 形参数组和实参数组的首地址重合
面向对象程序设计
8
第8页/共56页
数组
实例分析一
#include <iostream> using namespace std;
123、在给定定 数 义义 组 数数 的 组组前时时几不对个指数元定组素数中赋组的初全值长部,度元,其素 而余赋 用元初 花素值 括自 动号初中始 的e化 初g:为 值in个0t 数a[决5]定=数{1组,2长,3度,7,6};
eg:int ba[]5=]={1{,12,,23,,37},6; };
面向对象程序设计
9
第9页/共56页
数组
1、分析程序的运行结果 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];
} }
void main( ) { int Table[3][4] =
{{1,2,3,4},{2,3,4,5},{3,4,5,6}}; for (int i=0; i<3; i++) { for (int j=0; j<4; j++)
cout<<Table[i][j]<< " "; cout<<endl; } RowSum( Table,3 ); for ( i = 0; i < 3; i++) cout<<"sum of row "<<i<<":"<<Table[i][0]<<endl; }