数组名和指针作为形参?

来源:互联网 发布:程序员年度评价 编辑:程序博客网 时间:2024/06/07 11:36

1.用数组名做函数参数

f(int arr[],int n)①

调用时采用:f(arr,10)

由于数组名代表的是数组的地址,所以用数组名做参数的时候,其实是进行一个地址传递,会改变整个数组的值,所以①式也可以等价于:

f(int *arr,int n)



2.多维数组名作为函数的参数

在用指针变量做形参以接受实参数组名传递的地址时,有两种方法:

①采用和一维数组相同的方法,本质上把多维数组当做一维数组来用

②用指向一维数组的指针变量

下面一个例子来表示:


#include "stdio.h"
#define M 4
#define N 4
void rectmul(int (*p)[4],int (*q)[4],int m,int n);
void main()
{
 int a[M][N]={{1,2,3,4},{5,6,7,8},{4,3,2,1},{8,7,6,5}};
 int b[M][N]={{1,1,1,1},{2,2,2,2},{3,3,3,3},{4,4,4,4}};
 
 rectmul(a,b,M,N);
}
void rectmul(int (*p)[4],int (*q)[4],int m,int n)
{
 int i,j,k,s,r,num=0;
 int sum=0;
 for (i=0;i<m;i++)
 {
  for (j=0;j<n;j++)
  {
   
   for (s=0,r=0;s<n,r<m;s++,r++)
   {
    sum=sum+(p[i][s])*(q[r][j]);
   }
   
            printf("%d ",sum);
   num++;
   if (num%4==0)
   {
    printf("\n");
   }
   sum=0;
  }
 }
}

 

PS:(*p)[4]与*p[4]的区别

前者是表示:指向一个一维数组的指针,代表了这个指针指向的是一个数组,且这个数组的大小是4

后者是表示:一个指针数组。

 

在函数体内,可以直接用p[][]来表示数组中的元素,这是因为

p[i][j]=*(p[i]+j)=*(*(p+i)+j)

1 0
原创粉丝点击