一:字符指针变量,数组指针变量
1》:字符指针变量顾名思义,即指向字符的指针变量
1:char Te1[]="hello,world"
2:char Te2[]="hello,world"
3:char*Te3[]="hello,world"这个Te就是字符指针变量
4:char*Te4[]="hello,world"
判断这四个之间的关系,
首先判断1与2是否相同,答案为不同.因为Te1与Te2是两个数组,它们各自有自己开辟的空间,存放他们的字符
3与4是否相同,答案为相同,因为Te3与Te4是存放“hello,world”的地址的,而内容相同的常量字符串只保存一份。
2》:数组指针变量
首先,我们要区分数组指针与指针数组,数组指针是指针,而指针数组是数组。
数组指针:指向数组的指针 , 整形指针:指向整型的指针,字符指针:指向字符的指针,同理可以类推其它的。
而数组指针变量是存放数组的地址,整形指针变量是存放整形的地址,同理其它。
这里的指针数组与数组指针在写的时候非常容易写错那么接下来我将讲两个区别与相应的讲解
int *arr[] 根据c语言的运算符的优先级可知arr[]是先结合的,所以这个是指针数组
int(*arr)[] 而这个*arr加了括号则这两个先结合,那么这个就是数组指针。
https://www.bing.com/ck/a?!&&p=9137825050b4a8e8JmltdHM9MTY5OTY2MDgwMCZpZ3VpZD0yMDAwYjUxNi1jNjk3LTYwNDQtMmI3Zi1hN2U4YzdkNDYxOGYmaW5zaWQ9NTIyNw&ptn=3&ver=2&hsh=3&fclid=2000b516-c697-6044-2b7f-a7e8c7d4618f&psq=%e8%bf%90%e7%ae%97%e7%ac%a6%e7%9a%84%e4%bc%98%e5%85%88%e7%ba%a7&u=a1aHR0cHM6Ly9jLmJpYW5jaGVuZy5uZXQvdmlldy8yODUuaHRtbA&ntb=1
这个链接是c语言的运算符的优先性的讲解
int*arr[5], arr是数组,数组中有5个元素,每个元素的类型是int*,所以是指针数组
int(*arr)[5] arr是指针,指针指向的数组,数组有5个元素,每个元素的类型是int类型的。
二:二维数组传参的本质
说到二维数组,那么就要说一下一维数组传参
一维数组传参中,形参可以是数组也可以是指针
void Te(int arr[])可以写成这样是把整个数组传过来。
void Te(int *arr)这样是把数组的首个元素的地址传过来。
这两个都是可以的
int main()
{
int arr[10]={1,2,3,4,5,6,7,8}
Te1(arr)
}
二维数组传参时,形参用数组传参是很直接的,也很容易理解。
但是形参也可以用指针的形式
二维数组可以理解为一维数组的数组,对于二维数组,首元素是一维数组的第一行,首元素的地址就是第一行地址。
pr(int(*arr)[])传参可以这样写也是正确的
int main()
{
int arr[]={{1,2,3},{4,5,6},{7,8,9}}
Pr(arr)
return 0;
}
三:函数指针变量
讲这个之前,我先明确几个概念
数组名---数组的首元素的地址 &数组名-----整个数组的地址
函数名:函数的地址 &函数名:函数的地址
函数指针变量是用来存放函数的地址
int (* pf)(int, int) = &Add;//pf就是函数指针变量
// int ret = Add(3, 5);
int (* pf)(int, int) = &Add; 那么应用就是可以按照这个形式写
int ret2 = (*pf)(4, 9);
创作不易,望各位公主,少爷点个小赞赞!!!!!!!!!!!!!!