指针学习(4)

以往知识总结:
归纳起来,如果有一个实参数组,想在函数中改变此数组中的元素的值,实参与形参的对应关系有以下4种情况:

  1. 形参和实参都用数组名,如:
    void main()
    {
    int a[10];
    f(a,10);
    }
    void f (int x[],int n)
    {

    }
  2. 实参用数组名,形参用指针变量。如:
    void main()
    {
    int a[10];
    f(a,10);
    }
    f (int *a,int n)
    {

    }
  3. 实参形参都用指针变量。例如:
    void main()
    {
    int a[10],*p=a;
    f(p,10);
    }
    void f(int *x,int n)
    {

    }
  4. 实参为指针变量,形参为数组名。如:
    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");
	}
}

猜你喜欢

转载自blog.csdn.net/yooppa/article/details/112857451