总结一下今天所学的C语言:
第一;如果有一个实参数组,想在函数中改变此数组的元素的值,实参与形参的对应关系有以下4种:
1) 形参和实参都是数组名。
main()
{int a[10];
……
f(a,10)
……
f(intx[],int n)
{
……
}
}
a和x指的是同一组数组。
2) 实用数组,形参用指针变量。
main()
{int a[10];
……
f(a,10)
……
f(int*x,int n)
{
……
}
}
3) 实参、型参都用指针变量。
4) 实参为指针变量,型参为数组名。
对于以上的内容在这里做的两个针对练习:
练习(1)用实参指针变量改写将n个整数按相反顺序存放。
最后需要注意的一点是,main函数中的指针变量p是有确定值的,即如果用指针变作实参,必须现使指针变量有确定值,指向一个已定义的数组,记住咯!!
练习(2)用选择法对10个整数排序。
在这里可以延伸一点的是:函数sort用数组名作为形参,也可改为用指针变量,这时函数的首部可以改为:sort(int *x,int n) 其他可一律不改。
第二点:指向多维数组的指针和指针变量
1. 多维数组的地址
设有整型二维数组a[3][4]如下:
0 1 2 3
4 5 6 7
8 9 10 11
它的定义为:
inta[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}}
设数组a的首地址为1000,各下标变量的首地址及其值如图所示。
我在前面已经学过C语言是允许把一个二维数组分解为多个一维数组来处理,因此数组a可分解为三个一维数组,即a[0],a[1],a[2]。每一个一维数组又含有四个元素。
我们再看一下这个若有a[0]数组,含有a[0][0],a[0][1],a[0][2],a[0][3]四个元素。数组及数组元素的地址表示如下:从二维数组的角度来看,a是二维数组名,a代表整个二维数组的首地址,也是二维数组0行的首地址,等于1000。a+1代表第一行的首地址,等于1008。如图: