0


【c语言(指针数组与数组指针,函数指针与指针函数)】

指针数组与数组指针

指针数组:指针的数组,一个全是指针类型的数组

数组指针:数组的指针,一个指向数组的指针

表达方式


因为优先级的问题 ( )>[ ]> *

所以在表达方面会有所偏差

指针数组

int * p1 [ ] 因为[ ]的优先级大于*,所以变量名p1会首先与[ ]结合形成一个数组,然后int *表示的是数组中储存元素的类型

一些实例:

数组指针

int (p2) [ ] 因为()的优先级大于[ ],所以p2与结合,表示这是一个指针,指向的是一个数组,这个数组内存放的是int类型的元素

一些实例:

总结:

数组指针是一个指针变量,占有内存中一个指针的存储空间;

指针数组是多个指针变量,以数组的形式存储在内存中,占有多个指针的存储空间。

int arr[5]={1,2,3,4,5}; int (*p1)[5] = &arr; /下面是错误的/ int (*p2)[5] = arr;

&arr与arr的区别

数组名arr代表首元素的地址,&arr表示的整个数组的首地址,取值都相同,但是步长不同,在int arr[5]中arr+1是跳过4个字节,即一个元素,而&arr+1则跳过整个数组,即4*5=20个字节

而上面代码报错的原因是,在 C 语言中,赋值符号“=”号两边的数据类型必须是相同的,如果不同,则需要显示或隐式类型转换。在这里,p1 和 p2 都是数组指针,指向的是整个数组。p1 这个定义的“=”号两边的数据类型完全一致,而 p2 这个定义的“=”号两边的数据类型就不一致了(左边的类型是指向整个数组的指针,而右边的数据类型是指向单个字符的指针),因此会提示错误信息。


函数指针与指针函数

指针函数

指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。
声明格式为:类型说明符 * 函数名 (参数)

int fun(int x,int y);

这种其实就是一个函数,然后返回值是一个 int 类型,是一个数值。

int *fun(int x,int y);

这和上面那个函数唯一的区别就是在函数名前面多了一个*号,而这个函数就是一个指针函数。其返回值是一个 int 类型的指针,是一个地址。

所谓的指针函数也没什么特别的,和普通函数对比不过就是其返回了一个指针(即地址值)而已。

函数指针

函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。
声明格式:类型说明符 (*函数名) (参数)

int (*fun)(int x,int y);

函数指针是需要把一个函数的地址赋值给它,有两种写法:

fun = &Function;
fun = Function;

取地址运算符&不是必需的,因为一个函数标识符就表示了它的地址,例如数组名即代表数组的首元素位置。

调用函数指针的方式也有两种:

x = (*fun)();
x = fun();

两种方式均可,其中第二种看上去和普通的函数调用没啥区别。

两者区别

1,定义不同
指针函数本质是一个函数,其返回值为指针。
函数指针本质是一个指针,其指向一个函数。

2,写法不同
指针函数:int* fun(int x,int y);
函数指针:int (fun)(int x,int y);
可以简单粗暴的理解为,指针函数的
是属于数据类型的,而函数指针的星号是属于函数名的。
再简单一点,可以这样辨别两者:函数名带括号的就是函数指针,否则就是指针函数。

3,用法不同

标签: c语言 后端

本文转载自: https://blog.csdn.net/weixin_67120523/article/details/126267273
版权归原作者 at小嘿丶 所有, 如有侵权,请联系我们删除。

“【c语言(指针数组与数组指针,函数指针与指针函数)】”的评论:

还没有评论