第八章:指针04
让编程改变世界
Change the world by program
小结
归纳起来, 如果有一个实参数组, 想在函数中改变此数组中的元素的值, 实参与形参的对应关系有以下4种情况:
(1) 形参和实参都用数组名, 如:
[codesyntax lang="c"]
void main()
{
int a[10];
f(a, 10);
}
void f(int x[], int n)
{
}
[/codesyntax]
(2) 实参用数组名, 形参用指针变量。如:
[codesyntax lang="c"]
void main()
{
int a[10];
f (a, 10);
}
f(int *a, int n)
{
}
[/codesyntax]
(3) 实参形参都用指针变量。如:
[codesyntax lang="c"]
void main()
{
int a[10], *p = a;
f(a, 10);
}
void f(int *x, int n)
{
}
[/codesyntax]
(4) 实参为指针变量, 形参为数组名。如:
[codesyntax lang="c"]
void main()
{
int a[10], *p = a;
f(p, 10);
}
f(int x[], int n)
{
}
[/codesyntax]
源码分析
对数组中10个整数按由大到小顺序排序
程序源代码(点击下载)
多维数组与指针
用指针变量可以指向一维数组中的元素, 也可以指向多维数组中的元素。
但在概念上和使用上, 多维数组的指针比一维数组的指针要复杂一些。
多维数组元素的地址
先回顾一下多维数组的性质,可以认为二维数组是“数组的数组”, 例 :
定义int a[3][4] = {{1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23}};
则二维数组a是由3个一维数组所组成的。设二维数组的首行的首地址为2000
则有……
[caption id="attachment_154" align="aligncenter" width="300"]
多维数组元素的地址[/caption]
[caption id="attachment_155" align="aligncenter" width="300"]
多维数组元素的地址[/caption]
源码分析
输出二维数组有关的值
程序在此!(点击下载)
指向多维数组元素的指针变量
把二维数组a分解为一维数组a[0],a[1],a[2]之后,设p为指向二维数组的指针变量。
可定义为:int (*p)[4]
它表示p是一个指针变量,它指向包含4个元素的一维数组。若指向第一个一维数组a[0],其值等于a,a[0],或&a[0][0]等。
而p+i则指向一维数组a[i]。
从前面的分析可得出*(p+i)+j是二维数组i行j 列的元素的地址,而*(*(p+i)+j)则是i行j列元素的值。
二维数组指针变量说明的一般形式为:
类型说明符 (*指针变量名)[长度]
其中“类型说明符”为所指数组的数据类型。“*”表示其后的变量是指针类型。“长度”表示二维数组分解为多个一维数组时,一维数组的长度,也就是二维数组的列数。
实战演练
用指针变量输出二维数组元素的值
请看源码!
(点击下载)
课后题
通过输入指定行数和列数打印出二维数组对应任一行任一列元素的值。
详细答案将在下期公布,尽情收看!
[buy]
获得所有教学视频、课件、源代码等资源打包 [/buy]
[Downlink href='http://kuai.xunlei.com/d/LNYGLNJYDJXO']视频下载[/Downlink]