艾特商业网

指针数组作为参数传递(指针数组)

更新时间:2023-09-02 07:42:03

导读 你们好,最近小艾特发现有诸多的小伙伴们对于指针数组作为参数传递,指针数组这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看

你们好,最近小艾特发现有诸多的小伙伴们对于指针数组作为参数传递,指针数组这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。

1、 *指针数组可以描述为“指针数组”,定义int*p[n]。

2、 首先,这个变量是一个数组。其次,“指针”修改这个数组,意味着这个数组的所有元素都是指针类型。在32位系统中,指针占四个字节。

3、 :数组指针可以说是“数组指针”,也可以说是行指针,定义了int(*p)[n]。

4、 首先,这个变量是一个指针。其次,“array”修改这个指针,意思是这个指针存储一个数组的第一个地址,或者说这个指针指向一个数组的第一个地址。

5、 根据上面的解释,我们可以理解指针数组和数组指针的区别,因为它们基本上是不同类型的变量。

6、 2.1指针数组

7、 char *arr[4]={'zhi', 'zhen', 'shu', 'zu'};

8、 /*arr就是我定义的那个指针数组,有四个元素,每个元素都是char *类型。

9、 指向的指针,它存储相应字符串的第一个地址。*/

10、 []具有高优先级。先和arr组合成一个数组,然后用char*解释这是一个char*指针数组,有n个指针类型的数组元素。

11、 (当一个变量的左右两边都有运算符时,不记得运算符优先级的人会纠结arr变量先和哪个运算符组合。如果你自己定义了一个指针数组,又搞不清楚运算符的优先级,那就加括号()。

12、 比如定义a指针数组,可以写成char *(arr[4]),但是在定义之前,一定要明确定义的变量。如果目的是一个数组,就把arr[4]括起来。如果是指针,就用*arr括起来。

13、 如果你看到一段这样的代码,你可以从它的初始化来区分它是数组还是指针。显然,我在这里定义了一个数组。如果是指针,就用NULL初始化。)

14、 首先,定义一个数组指针,名为pa。

15、 char (*pa)[4];

16、 ()具有高优先级。首先,它意味着pa是一个指向整数一维数组的指针。这个一维数组的长度是4,也可以说是pa的步长。也就是说,当pa 1被执行时,pa将跨越4个char数据的长度。

17、 如果指针数组和数组指针同名,会是这样的:

18、 char *pa[4]和char (*pa)[4],

19、 原来指针数组和数组指针形成的根本原因是运算符的优先级,所以在定义变量的时候一定要注意这个问题,否则定义变量会有根本的区别!

20、 Pa是指向char [4]数组的指针,每个数组元素都是char类型的变量。

21、 所以我们不妨可以写成:char[4] (*pa);这样就可以直观的看出pa的指向的类型,不过在编辑器中不要这么写,因为编译器根本不认识,这样写只是帮助我们理解。

22、 既然pa是一个指针,存放一个数组的地址,那么在我们定义一个数组时,数组名称就是这个数组的首地址,那么这二者有什么区别和联系呢?

23、 char a[4];

24、 a是一个长度为4的字符数组,a是这个数组的首元素首地址。既然a是地址,pa是指向数组的指针,那么能将a赋值给pa吗?答案是不行的!因为a是数组首元素首地址,pa存放的却是数组首地址,

25、 a是char 类型,a+1,a的值会实实在在的加1,而pa是char[4]类型的,pa+1,pa则会加4,虽然数组的首地址和首元素首地址的值相同,但是两者操作不同,所以类型不匹配不能直接赋值,

26、 但是可以这样:pa=a,pa相当与二维数组的行指针,现在它指向a[4]的地址。

以上就是指针数组这篇文章的一些介绍,希望对大家有所帮助。

免责声明:本文由用户上传,如有侵权请联系删除!