#include <iostream>
using namespace std;
//数组做函数的参数:一维数组名是指向int类型的指针,二维数组名是指向int[n]类型的指针
//一维数组的做形参:
/*
void fun(int *p)
void fun(int p[])
void fun(int p[2])
*/
//一维数组的做形参:
/*
void fun(int (*p)[10])
void fun(int p[][10])
void fun(int p[2][10])
*/
//实参直接把数组名字写上就可以了
//这里声明数字是多少都没有关系,
void fun(int a[3]){
printf("fun: a[0] = %d\n", *(a+6));
}
void fun2(int a[]){
printf("fun2: a[0] = %d\n", *a);
}
void fun3(int *a){
printf("fun2: a[0] = %d\n", *a);
}
int main(){
/*
数组指针
*/
int(*arrPtr1)[10]=NULL;
int matrix[3][10];
//arrPtr是一个指向(有十个元素)数组的指针
//matrix是指向首元素(有十个元素数组)的指针(一共有三个元素)
arrPtr1=matrix;
//[]是寻址符:(*arrPtr)[i] 等同于 *((*arrPtr)+i)
(*arrPtr1)[0]=5;
arrPtr1[2][9]=6;
arrPtr1++;//加了40,16进制28
(*arrPtr1)[0]=7;
arrPtr1[1][9]=10;
int(*arrPtr2)[10]=NULL;
int(*arrPtr3)[10]=NULL;
int array[10];
//arrPtr是一个指向(有十个元素)数组的指针
//a是指向首元素(一个整数)的指针
arrPtr2=(int(*)[10])array;//直接写a会报错
arrPtr3 = &array;
arrPtr2++;//加了40,16进制的28
arrPtr3++;//加了40,16进制的28
/*
数组做参数:形参写指针或者数组名都可以,实参也是
*/
int i = 1;
int *p = NULL;
int a[10] = {1,2,3,4,5,6,7,8,9,10};
p = &i;
// fun(&i);
// fun(p);
fun(a);
fun2(&i);
fun2(p);
fun2(a);
fun3(&i);
fun3(p);
fun3(a);
return 0;
}