复习与补充一 数组、指针及动态存储分配 1、一维数组的定义与使用 2、数组与指针 3、数组与函数 4、二维数组及二维数组元素的不同表示 5、二维数组与二级指针 6、如何在函数中处理二维数组 7、动态存储分配
复习与补充一 1、一维数组的定义与使用 2、数组与指针 3、数组与函数 4、二维数组及二维数组元素的不同表示 5、二维数组与二级指针 6、如何在函数中处理二维数组 7、动态存储分配 数组、指针及动态存储分配
数组 数组是数据结构中最基本的结构类型 是一种顺序式的结构 是存储同一类型数据的数据结构 ·数组使用的是一种静态的内存空间配置
数组 • 数组是数据结构中最基本的结构类型 • 是一种顺序式的结构 • 是存储同一类型数据的数据结构 • 数组使用的是一种静态的内存空间配置
维数组的定义与使用 ·格式 定义格式:数据类型数组名长度自然数] 使用格式:数组名[整数] 数组的下标值为负数也可以! ·定义形式 仅定义数组,不指定初值; int a[5] 定义数组的同时指定初值; nta]={1,2,3}; 定义时由编译系统根据初值的个数确定元素个数。lnta[]={1,2,3,4,5} 例:b1Aray1
1、一维数组的定义与使用 • 格式 定义格式:数据类型 数组名[长度自然数] 使用格式:数组名[ 整数] • 定义形式 仅定义数组,不指定初值; int a[5]; 定义数组的同时指定初值; int a[5] = { 1, 2, 3}; 定义时由编译系统根据初值的个数确定元素个数。 Int a[ ] = { 1, 2, 3, 4, 5}; 数组的下标值为负数也可以! 例: b1_Array1
2、数组与指针 一维数组的数组名在程序中表示整个数组在内存中所占区域的首地址 数组中的元素是参照首地址来确定元素的存储位置。 指针的定义 定义格式:数据类型指针变量名; 指针变量与其他变量均占一定的存储空间,其值可以改变,只不过指针变量所对应的存 储空间内存放的是地址信息。 指针运算 求指向运算 加减整数的运算 作差运算 ·指针与一维数组的对应 int a[lo], *p p- a a, alil, &alil p, *p, p+i, *(p+i), pli] 例:Aray_ pointer
2、数组与指针 一维数组的数组名在程序中表示整个数组在内存中所占区域的首地址, 数组中的元素是参照首地址来确定元素的存储位置。 • 指针的定义 定义格式: 数据类型 指针变量名; 指针变量与其他变量均占一定的存储空间,其值可以改变,只不过指针变量所对应的存 储空间内存放的是地址信息。 • 指针运算 求指向运算 加减整数的运算 作差运算 • 指针与一维数组的对应 int a[10], *p; p = a; a, a[i], &a[i], p, *p, p+i, *(p+i), p[i] 例: Array_pointer
3、数组作为函数参数 #include int sum( int *p, int n 函数中用指针参数接收数组地址 参数形式也可以是:intp[或ntp[10],但 int 1 m: 无论怎样,函数中的参数都是局部指针变 for(m=0,i=0;i<n;i++)量。调用函数时的参数传递相当于给该指 m+*(p+i1); 针参数赋值 return m void maino inta[10]={1,2,3,4,5,6,7,8,9,10} printf(%d\n", sum(a, 10)) 调用函数时传递数组地址 例:Aray_ function
3、数组作为函数参数 #include int sum( int *p, int n) { int i, m; for(m = 0, i = 0; i < n; i++) m = m + *(p+i); return m; } void main() { int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; printf("%d\n", sum(a, 10)); } 函数中用指针参数接收数组地址 参数形式也可以是:int p[]或int p[10],但 无论怎样,函数中的参数都是局部指针变 量。调用函数时的参数传递相当于给该指 针参数赋值。 调用函数时传递数组地址 例: Array_function
4、二维数组与元素表示 格式 定义格式:数据类型数组名[长度自然数长度自然数] 使用格式:数组名[整数整数] 二维数组中的几种表示形式 如有定义:inta[3J[5;则a表示二维数组的首地址,且a0],a[1, a[2]分别相当于有5个元素的一维数组的数组名 *a[0 →a[0][0] a[0]+1 &a[O][1] +1 a[1]&a[1[0 例:two_ demension_ Array
4、二维数组与元素表示 • 格式 定义格式: 数据类型 数组名[长度自然数][长度自然数] 使用格式: 数组名[ 整数][整数] • 二维数组中的几种表示形式 如有定义:int a[3][5]; 则 a 表示二维数组的首地址,且a[0], a[1], a[2]分别相当于有5个元素的一维数组的数组名。 *a[0] a[0] + 1 a + 1 a[0][0] &a[0][1] a[1] &a[1][0] 例: two_demension_Array
地址 a ao]「12f44 12f144 a[1]:12f18 1248 a(2(12m0 F6c 123456789 12f4c 12150 12f154 12f158 定义: 10 2][o] 12ff6c inta[3][5]={1,2,3,4,5,6, 7,8,9,10,11,12,13,14,15} 12 345
a[0][0] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 定义: int a[3][5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; a[1][0] a[2][0] 12ff44 12ff58 12ff6c a[0] a[1] a[2] a 12ff44 12ff58 12ff6c 12ff48 12ff4c 12ff50 12ff54 地址
5、二维数组与二级指针 二级指针的定义 定义格式:数据类型*指针变量名 二级指针变量的值是另一一级指针变量的地址 ·二维数组与二级指针 维数组的数组名相当于二级指针常量 指针数组与指向数组的指针 指针数组 int*p[10] 指向数组的指针int(*p)[10 例: two level_pointer
5、二维数组与二级指针 • 二级指针的定义 定义格式:数据类型 **指针变量名 二级指针变量的值是另一一级指针变量的地址。 • 二维数组与二级指针 二维数组的数组名相当于二级指针常量 • 指针数组与指向数组的指针 指针数组 int *p[10]; 指向数组的指针 int (*p)[10]; 例: two_level_pointer
地址 12f138 p[o]「12f44 12f144 p]{12f58 2 1248 12f4c p[2] 12ff6c 3 12150 12f154 6 12f158 7 8 定义 inta[3][5]={1,2,3,4,5,6,7, 10 8,9,10,11,12,13,14,15} 2][o] 12ff6c int *p[3], **pp 12 pp- p 13 p 14 p p[2]=a[2]
a[0][0] 123456789 10 11 12 13 14 15 定义: int a[3][5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; int *p[3], **pp; pp = p; p[0] = a; p[1] = a[1]; p[2] = a[2]; a[1][0] a[2][0] 12ff44 12ff58 12ff6c p[0] p[1] p[2] pp 12ff44 12ff58 12ff6c 12ff48 12ff4c 12ff50 12ff54 地址 12ff38
6、如何在函数中处理二维数组 方法一 用一维数组的方法来处理 方法二 用指向一维数组的指针参数 1F ] two demension function
6、如何在函数中处理二维数组 • 方法一 用一维数组的方法来处理 • 方法二 用指向一维数组的指针参数 例: two_demension_function