1、第七章 数组与指针,7.1 数组,7.2 指针,7.3 指针运算,7.4 指针与数组,7.5 指针与函数,7.6 指针与字符串,7.7 对象指针,7.8 动态内存分配,一、 数组,数组是由一定数目的同类元素顺序排列而成的结构类型数据一个数组在内存占有一片连续的存储区域数组名是存储空间的首地址数组的每个元素用下标变量标识,一维数组的元素是基本类型、结构类型或类类型一维数组是向量,一维数组,定义格式为: 数据类型 数组名 元素个数 ;,一维数组定义,4.1.1 一维数组与初始化,数组元素值类型,数组名 存储地址,整型常量表达式 取值:0n-1,例如 const int N = 20 ; const
2、 int M = 40 ; const int MaxStringSize = 80 ; const int MaxListSize = 1000 ; int A 10 ; char B MaxStringSize ; float C M*N ; int Values MaxListSize ;,4.1.1 一维数组与初始化,一维数组定义,4.1.1 一维数组与初始化,一维数组元素引用,引用格式为: 数组名 下标 ;,例: int ary 10 , i = 3, j = 5 ;,ary 0 = 10,10,ary i = 2,2,ary j = ary i ,ary 2+j = 31,31,2
3、,ary ary i = ary 0 ,10,4.1.1 一维数组与初始化,一维数组元素引用,与普通变量一样,可以在数组定义的同时,对数组元素赋初值,例: int a 5 = 1, 3, 5, 7, 9 ; int b1 5 = 0 ; int b2 5 = 1, 2, 3 ; int c = 1, 2, 3, 4, 5, 6, 7 ; int d 5 = 1, 2, 3, 4, 5, 6, 7 ;,4.1.1 一维数组与初始化,一维数组初始化,/ 各元素分别赋初始值,/ 全部元素初始化为 0,/ b23, b24自动赋 0,/ 自动定义数组长度为7,/ 错误,初始化数据过多,4.1.1 一维
4、数组与初始化,一维数组初始化,初始化数组的值不能多于数组元素的个数,初始化数组的值也不能通过跳过逗号的方式来省略,这在C中是允许的,但在C+中不允许。,注,int array25=1, ,2,3,4; /error,/ 例 数组测试 #include void main() int a 5 = 1, 3, 5, 7, 9 ; for ( int i = 0; i 5; i + )cout a i “ ” ; cout endl ; static int b 5 = 1, 2, 3 ; for ( i = 0 ; i 5 ; i + )cout b i “ ” ; cout endl ; int
5、 c = 1, 2, 3, 4, 5, 6, 7 ; for ( i = 0 ; i sizeof ( c ) / sizeof ( int ) ; i + )cout c i “ ” ; cout endl ; ,4.1.1 一维数组与初始化,/ 声明数组a并初始化,/ 输出数组a的全部元素值,/ 声明静态数组b并初始化,/ 输出数组b的全部元素值,/ 声明数组c,初始化,默认长度 7,/ 输出数组c的全部元素值,二维数组,二维数组具有两个下标 二维数组是矩阵,二维数组定义, ;,int a 3 4 ; / 二维数组a,3 行4列,数组名 表达式1 表达式2 ,二维数组访问,二维数组初始化,
6、int a 2 3 =1,2,3,6,7,8 /直接给出常数表 int a 2 3 =1,2,3,6,7,8 /按维给出常数表 int a 2 3 =1,2,6 /部分元素初始化,/ 例 访问二维数组 #include #include void main ( ) int a 3 4 ;int i , j ;for ( i = 0 ; i a i j ;for ( i = 0 ; i 3 ; i + ) for ( j = 0 ; j 4 ; j + )cout setw ( 5 ) a i j ;cout endl ; ,4.3.2 二维数组访问,数组元素作参数的性质与简单变量相同数组名作参
7、数传递地址数组元素和数组名都可以作为引用参数,数组作函数参数,#include #include void fun( int, int, int ); void main() int i , a3 = 1, 2, 3 ;fun ( a0 , a1 , a2 ) ;for ( i = 0 ; i 3 ; i + ) cout setw( 4 ) a i ;cout endl ; void fun ( int a, int b, int c ) a+ ; b+ ; c+ ;cout setw( 4 ) a setw( 4 ) b setw( 4 ) c endl ;return ; ,向函数传送数
8、组元素,#include int sum ( int ap , int n ) int m = 0 ;for ( int i = 0 ; i n ; i + ) m += * ap ; ap + ;return m; void main() int a 10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;cout “sum = “ sum ( a , 10 ) endl ; ,数组名作函数参数,/ 例 #include int sum ( int ap , int n ) int m = 0 ;for ( int i = 0 ; i n ; i + ) m += * ap
9、; ap + ;return m; void main() int a 10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;cout “sum = “ sum ( a , 10 ) endl ; ,4.4.2 数组名作函数参数,数组名作函数参数,/ 例 #include int sum ( int ap , int n ) int m = 0 ;for ( int i = 0 ; i n ; i + ) m += * ap ; ap + ;return m; void main() int a 10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;cout
10、 “sum = “ sum ( a , 10 ) endl ; ,数组名作函数参数,4.4.2 数组名作函数参数,/ 例 #include int sum ( int ap , int n ) int m = 0 ;for ( int i = 0 ; i n ; i + ) m += * ap ; ap + ;return m; void main() int a 10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;cout “sum = “ sum ( a , 10 ) endl ; ,数组名作函数参数,4.4.2 数组名作函数参数,/ 例 #include int su
11、m ( int ap , int n ) int m = 0 ;for ( int i = 0 ; i n ; i + ) m += * ap ; ap + ;return m; void main() int a 10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;cout “sum = “ sum ( a , 10 ) endl ; ,数组名作函数参数,4.4.2 数组名作函数参数,0x0065FDD0,/ 例 #include int sum ( int ap , int n ) int m = 0 ;for ( int i = 0 ; i n ; i + ) m +
12、= * ap ; ap + ;return m; void main() int a 10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;cout “sum = “ sum ( a , 10 ) endl ; ,ap,10,n,数组名作函数参数,4.4.2 数组名作函数参数,0x0065FDD0,/ 例 #include int sum ( int ap , int n ) int m = 0 ; for ( int i = 0 ; i n ; i + ) m += * ap ; ap + ;return m; void main() int a 10 = 1, 2, 3,
13、 4, 5, 6, 7, 8, 9, 10 ;cout “sum = “ sum ( a , 10 ) endl ; ,ap,10,n,数组名作函数参数,4.4.2 数组名作函数参数,0x0065FDD0,/ 例 #include int sum ( int ap , int n ) int m = 0 ; for ( int i = 0 ; i n ; i + ) m += * ap ; ap + ;return m; void main() int a 10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;cout “sum = “ sum ( a , 10 ) endl
14、 ; ,ap,10,n,数组名作函数参数,4.4.2 数组名作函数参数,0x0065FDD0,/ 例 #include int sum ( int ap , int n ) int m = 0 ; for ( int i = 0 ; i n ; i + ) m += * ap ; ap + ;return m; void main() int a 10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;cout “sum = “ sum ( a , 10 ) endl ; ,ap,10,n,数组名作函数参数,4.4.2 数组名作函数参数,10,/ 例 #include int
15、sum ( int ap , int n ) int m = 0 ; for ( int i = 0 ; i n ; i + ) m += * ap ; ap + ;return m; void main() int a 10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;cout “sum = “ sum ( a , 10 ) endl ; ,n,数组名作函数参数,4.4.2 数组名作函数参数,10,/ 例 #include int sum ( int ap , int n ) int m = 0 ; for ( int i = 0 ; i n ; i + ) m +=
16、* ap ; ap + ;return m; void main() int a 10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;cout “sum = “ sum ( a , 10 ) endl ; ,n,数组名作函数参数,4.4.2 数组名作函数参数,10,n,/ 例 #include int sum ( int ap , int n ) int m = 0 ; for ( int i = 0 ; i n ; i + ) m += * ap ; ap + ;return m; void main() int a 10 = 1, 2, 3, 4, 5, 6, 7, 8
17、, 9, 10 ;cout “sum = “ sum ( a , 10 ) endl ; ,数组名作函数参数,4.4.2 数组名作函数参数,10,n,/ 例 #include int sum ( int ap , int n ) int m = 0 ; for ( int i = 0 ; i n ; i + ) m += * ap ; ap + ;return m; void main() int a 10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;cout “sum = “ sum ( a , 10 ) endl ; ,数组名作函数参数,4.4.2 数组名作函数参数,
18、10,n,/ 例 #include int sum ( int ap , int n ) int m = 0 ; for ( int i = 0 ; i n ; i + ) m += * ap ; ap + ;return m; void main() int a 10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;cout “sum = “ sum ( a , 10 ) endl ; ,数组名作函数参数,4.4.2 数组名作函数参数,10,n,/ 例 #include int sum ( int ap , int n ) int m = 0 ; for ( int i =
19、 0 ; i n ; i + ) m += * ap ; ap + ;return m; void main() int a 10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;cout “sum = “ sum ( a , 10 ) endl ; ,数组名作函数参数,4.4.2 数组名作函数参数,10,n,/ 例 #include int sum ( int ap , int n ) int m = 0 ; for ( int i = 0 ; i n ; i + ) m += * ap ; ap + ;return m; void main() int a 10 = 1,
20、 2, 3, 4, 5, 6, 7, 8, 9, 10 ;cout “sum = “ sum ( a , 10 ) endl ; ,数组名作函数参数,4.4.2 数组名作函数参数,10,n,/ 例 #include int sum ( int ap , int n ) int m = 0 ; for ( int i = 0 ; i n ; i + ) m += * ap ; ap + ;return m; void main() int a 10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;cout “sum = “ sum ( a , 10 ) endl ; ,数组名作
21、函数参数,4.4.2 数组名作函数参数,/ 例 #include int sum ( int ap , int n ) int m = 0 ;for ( int i = 0 ; i n ; i + ) m += * ap ; ap + ;return m; void main() int a 10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;cout “sum = “ sum ( a , 10 ) endl ; ,10,n,数组名作函数参数,4.4.2 数组名作函数参数,对象数组是指数组元素为类对象的数组 对象数组的元素不仅包括数据成员,而且还包括成员函数,对象数组,对象
22、数组的定义,对象数组的引用,对象数组的初始化,Point A2=Point(3,4),Point(12,18);,#include #include class Point public:Point(); Point(double x1,double y1);Point();double Abs();double GetPointx()return x;double GetPointy()return y; private:double x,y; ;,Point:Point() x=0;y=0;cout“Executing No Parameter Constructor.“endl; Poi
23、nt:Point(double x1,double y1) x=x1;y=y1;cout “Executing Constructor .“endl; Point:Point() cout“Executing Destructor .“endl; double Point:Abs() return sqrt(x*x+y*y); void main() Point P3=Point(3,4),Point(12,18); for(int i=0;i3;i+) coutPi.Abs()endl; ,对象数组的初始化,Executing Constructor . Executing Construc
24、tor . Executing No Parameter Constructor. 5 21.6333 0 Executing Destructor Executing Destructor Executing Destructor,字符数组与字符串,以字符数组作字符串:0 为字符串结束标志0 是ASCII码为0的不可显示字符,即“空操作符” 对字符数组以字符串常量进行初始化时,自动添加 0,字符串存储,字符数组不同的初始化方式:逐个字符对数组元素赋初始值:char str110 = S, t, u, d, e, n, t ;,普通数组 不添加 0,4.6.1 字符串存储,字符串存储,用字符串
25、常量初始化char str210 = “Student“ ;char str3 = “Student“ ; char str4 = “Student“ ;,字符串 添加 0,字符数组不同的初始化方式:,4.6.1 字符串存储,字符串存储,/例 字符数组的访问 #include void main() char ca 5 = a , b , c , d , e ;for ( int i = 0 ; i 5 ; i + ) cout ca i ; /逐个数组元素输出cout endl ;cout ca endl ; /整体输出字符数组 ,4.6.2 字符串访问,字符串的访问,数组初始化 没有结束符
26、,可以正确显示字符串,找不到结束符 字符串后显示无意义符号,/例 字符数组的访问 #include void main() char ca 5 = a , b , c , d , e ;for ( int i = 0 ; i 5 ; i + ) cout ca i ; /逐个数组元素输出cout endl ;cout ca endl ; /整体输出字符数组 ,static char cb 5 = a , b , c ; for ( int i = 0 ; i 5 ; i + ) cout cb i ; cout endl ; cout cb endl ;,4.6.2 字符串访问,字符串的访问,
27、静态数组 自动对其余元素初始化为0,都能够 正确输出字符串,/例 字符数组的访问 #include void main() char ca 5 = a , b , c , d , e ;for ( int i = 0 ; i 5 ; i + ) cout ca i ; /逐个数组元素输出cout endl ;cout ca endl ; /整体输出字符数组 ,char cc = i , j , k , l , m , 0 ;for ( int i = 0 ; i sizeof( cc ) / sizeof( char ) ; i + )cout cci ;cout endl ;cout cc
28、endl ;,4.6.2 字符串访问,字符串的访问,/例 字符数组的访问 #include void main() char ca 5 = a , b , c , d , e ;for ( int i = 0 ; i 5 ; i + ) cout ca i ; /逐个数组元素输出cout endl ;cout ca endl ; /整体输出字符数组 ,char cc = i , j , k , l , m , 0 ;for ( int i = 0 ; i sizeof( cc ) / sizeof( char ) ; i + )cout cci ;cout endl ;cout cc endl
29、 ;,添加结束符,4.6.2 字符串访问,字符串的访问,/例 字符数组的访问 #include void main() char ca 5 = a , b , c , d , e ;for ( int i = 0 ; i 5 ; i + ) cout ca i ; /逐个数组元素输出cout endl ;cout ca endl ; /整体输出字符数组 ,char cc = i , j , k , l , m , 0 ;for ( int i = 0 ; i sizeof( cc ) / sizeof( char ) ; i + )cout cci ;cout endl ;cout cc en
30、dl ;,计算字节数,4.6.2 字符串访问,字符串的访问,/例 字符数组的访问 #include void main() char ca 5 = a , b , c , d , e ;for ( int i = 0 ; i 5 ; i + ) cout ca i ; /逐个数组元素输出cout endl ;cout ca endl ; /整体输出字符数组 ,char cd = “I am a student.“ ;for ( int i = 0 ; cdi != 0 ; i + ) cout cdi ;cout endl ;cout cd endl ;,4.6.2 字符串访问,字符串的访问,
31、/例 字符数组的访问 #include void main() char ca 5 = a , b , c , d , e ;for ( int i = 0 ; i 5 ; i + ) cout ca i ; /逐个数组元素输出cout endl ;cout ca endl ; /整体输出字符数组 ,char cd = “I am a student.“ ;for ( int i = 0 ; cdi != 0 ; i + ) cout cdi ;cout endl ;cout cd endl ;,自动添加结束符,4.6.2 字符串访问,字符串的访问,/例 字符数组的访问 #include vo
32、id main() char ca 5 = a , b , c , d , e ;for ( int i = 0 ; i 5 ; i + ) cout ca i ; /逐个数组元素输出cout endl ;cout ca endl ; /整体输出字符数组 ,char cd = “I am a student.“ ;for ( int i = 0 ; cdi != 0 ; i + ) cout cdi ;cout endl ;cout cd endl ;,检查串结束符,4.6.2 字符串访问,字符串的访问,/例 字符数组的访问 #include void main() char ca 5 = a
33、 , b , c , d , e ;for ( int i = 0 ; i 5 ; i + ) cout ca i ; /逐个数组元素输出cout endl ;cout ca endl ; /整体输出字符数组 ,char ce10 ;cin ce ;cout ce endl ;,4.6.2 字符串访问,字符串的访问,/例 字符数组的访问 #include void main() char ca 5 = a , b , c , d , e ;for ( int i = 0 ; i 5 ; i + ) cout ca i ; /逐个数组元素输出cout endl ;cout ca endl ; /
34、整体输出字符数组 ,char ce10 ;cin ce ;cout ce endl ;,接受输入 空格或换行结束,4.6.2 字符串访问,字符串的访问,/例 字符数组的访问 #include void main() char ca 5 = a , b , c , d , e ;for ( int i = 0 ; i 5 ; i + ) cout ca i ; /逐个数组元素输出cout endl ;cout ca endl ; /整体输出字符数组 ,char ce10 ;cin ce ;cout ce endl ;,键盘输入,4.6.2 字符串访问,字符串的访问,/例 字符数组的访问 #include void main() char ca 5 = a , b , c , d , e ;for ( int i = 0 ; i 5 ; i + ) cout ca i ; /逐个数组元素输出cout endl ;cout ca endl ; /整体输出字符数组 ,char ce10 ;cin ce ;cout ce endl ;,输出显示,4.6.2 字符串访问,字符串的访问,