以往知识总结:
归纳起来,如果有一个实参数组,想在函数中改变此数组中的元素的值,实参与形参的对应关系有以下4种情况:
- 形参和实参都用数组名,如:
void main()
{
int a[10];
f(a,10);
}
void f (int x[],int n)
{
…
} - 实参用数组名,形参用指针变量。如:
void main()
{
int a[10];
f(a,10);
}
f (int *a,int n)
{
…
} - 实参形参都用指针变量。例如:
void main()
{
int a[10],*p=a;
f(p,10);
}
void f(int *x,int n)
{
…
} - 实参为指针变量,形参为数组名。如:
void main()
{
int a[10],*p=a;
…
f(p,10);
}
f (int x[],int n)
{
…
}
多维数组与指针:
用指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素。
概念和使用上,多维数组的指针比一维数组的指针要复杂一些。
把二维数组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列元素的值。
二维数组指针变量说明的一般形式为:
类型说明符 (✳指针变量名)[长度]
其中“类型说明符”为所指数组的数据类型。“*”
表示其后的变量是指针类型。“长度”表示二维数组分解为多个一维数组时,一维数组的长度,也就是二维数组的列数。
示例:
#include<stdio.h>
int main()
{
int a[3][4]={
23,2,3,3,45,5,6,0,10,22,32,2323};
int i,j;
int (*p)[4];
p=a;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%2d ",*(*(p+i)+j));
}
printf("\n");
}
}