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