C++数组做形参 一

在学习过程中遇到以下问题:

Access Violation :非法访问

unhandled exception:程序发生异常并且没有处理

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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值