在学习过程中遇到以下问题:
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()
{
}
void rectmul(int (*p)[4],int (*q)[4],int m,int n)
{
}
PS:(*p)[4]与*p[4]的区别
前者是表示:指向一个一维数组的指针,代表了这个指针指向的是一个数组,且这个数组的大小是4
后者是表示:一个指针数组。
在函数体内,可以直接用p[][]来表示数组中的元素,这是因为
p[i][j]=*(p[i]+j)=*(*(p+i)+j)