指针数组与数组指针
//指针数组 - 是数组 - 是一种存放指针的数组
//数组指针 - 是指针 - 是一种指向数组的指针 - 存放的是数组的地址
#include<stdio.h>
int main()
{
//指针数组
char* arr[5];
//数组指针;
int arr[5];
int(*p)[5] = &arr;
return 0;
}
arr 和 &arr 有什么区别?
数组名绝大部分情况下是数组首元素的地址
但是有2个例外:
1. sizeof(数组名) - sizeof内部单独放一个数组名的时候,数组名表示的整个数组,计算得到的是数组的总大小
2. &arr - 这里的数组名表示整个数组,取出的是整个数组的地址,从地址值的角度来讲和数组首元素的地址是一样的,但是意义不一样
![](https://i-blog.csdnimg.cn/blog_migrate/5140eee1041daf8366c67e3b98eda3c9.png)
二维数组的起始就是一维数组的数组
![](https://i-blog.csdnimg.cn/blog_migrate/87b48696965d3f48ddcc6d77530efaec.png)
运行效果
![](https://i-blog.csdnimg.cn/blog_migrate/68a7730a5c0c10015878a88fa6fa7080.png)
一维数组传参
一维数组传参形参可以是数组,也可以是指针,要注意类型
![](https://i-blog.csdnimg.cn/blog_migrate/ed12417e7a398f6ea7cccd0327897402.png)
二维数组传参
参数可以是指针也可以是数组,但如果是数组,行可以省略,列不可以,如果
是指针,传过去的是第一行的地址,形参应该是数组指针
![](https://i-blog.csdnimg.cn/blog_migrate/e9a49bd61ec957a077e0bf4702280abf.png)
一级指针传参
例如有一个函数 void print(int*p,int a)
int a;
print(&a,10); OK
int *p1=&a;
print(p1,10) OK
int arr[10];
print(arr,10); OK
二级指针传参
test(二级指针变量)
tese(一级指针变量的地址)
![](https://i-blog.csdnimg.cn/blog_migrate/418faa15fb75c296b8560be334d2d9eb.png)