复习与补充一
1、一维数组的定义与使用
2、数组与指针
3、数组与函数
4、二维数组及二维数组元素的不同表示
5、二维数组与二级指针
6、如何在函数中处理二维数组
7、动态存储分配数组、指针及动态存储分配数组
数组是数据结构中最基本的结构类型
是一种顺序式的结构
是存储同一类型数据的数据结构
数组使用的是一种静态的内存空间配置
1、一维数组的定义与使用
格式定义格式,数据类型 数组名 [长度自然数 ]
使用格式,数组名 [ 整数 ]
定义形式仅定义数组,不指定初值; int a[5];
定义数组的同时指定初值; int a[5] = { 1,2,3};
定义时由编译系统根据初值的个数确定元素个数。 Int a[ ] = { 1,2,3,4,5};
数组的下标值为负数也可以!
例,b1_Array1
2、数组与指针一维数组的数组名在程序中表示整个数组在内存中所占区域的首地址,
数组中的元素是参照首地址来确定元素的存储位置。
指针的定义定义格式,数据类型 指针变量名 ;
指针变量与其他变量均占一定的存储空间,其值可以改变,只不过指针变量所对应的存储空间内存放的是地址信息。
指针运算求指向运算 加减整数的运算 作差运算
指针与一维数组的对应
int a[10],*p; p = a;
a,a[i],&a[i],p,*p,p+i,*(p+i),p[i] 例,Array_pointer
3、数组作为函数参数
#include <stdio.h>
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、二维数组与元素表示
格式定义格式,数据类型 数组名 [长度自然数 ][长度自然数 ]
使用格式,数组名 [ 整数 ][整数 ]
二维数组中的几种表示形式如有定义,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[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
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};
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、如何在函数中处理二维数组
方法一用一维数组的方法来处理
方法二用指向一维数组的指针参数例,two_demension_function
7、动态存储分配
为什么要使用动态存储分配在事先无法确定所需要的存储空间大小时。
相关函数
void * malloc( unsigned size);
void * realloc( void *p,unsigned size);
void * calloc( unsigned n,unsigned size);
void free( void *p);
使用步骤定义指针变量;调用 calloc或 malloc;类型转换;通过指针使用例,two_demension_function
作业
1、输入 10个整数,将其中最小的数与第一个对换,把最大的数与最后一个数对换,要求写 3个函数:( 1)输入 10个数;( 2)进行比较与对换处理;( 3)输出 10个数。
2、有 n个整数,使前面的 n-m个数顺序向后移 m个位置,后面的 m个数变成最前面的 m
个数。( m<n)