一文掌握C语言数组使用(二)

四、数组作为函数参数

①调用函数传参数组时,减少函数传数组时的成本问题(时间和空间)。因为传参时,需要临时拷贝,如果数组过大,可能会浪费资源,严重的话可能栈溢出。

②数组元素降维成指向数组内部元素类型的指针。

③对指针加一,加上所指向的类型的大小。

1、一维数组

看代码:

 

 画图解析:

 

总结:

(1)形参格式,例如int arr[ ]或者int *arr,两者等价。

(2)形参元素个数可被忽略,并且建议忽略(有可能改变了实参的大小,这样比较方便)。或者也可以填写比实参元素个数大的值。

(3)用sizeof()求数组元素个数时,尽量在数组定义时求。因为传参后数组会降维成指针。

2、二维数组

前面说了数组元素降维成指向数组内部元素类型的指针,二维int整型数组的内部元素不再是int整型,而是具有四个整型的一维数组。
对指针加一,加上所指向的类型的大小。对二维数组的指针加一,加上的值为内部一维数组的大小。
看代码:

 画图解析:

 

 

形参格式,例如:int arr[][4]或者int (*arr)[4],这里为指向具有四个整型元素的一维数组的数组指针。

除了第一个中括号里的数字可以省,后面的中括号的内容不能省略,因为下标是数组类型的一部分,省略掉就不明确其类型。

注意:

看待所有的数组时,都将它看作一维数组,只不过其内部元素不一样,例如:三维数组其内部元素为二维数组,而二维数组也是由一维数组组成,都是线性连续且相等的

 

五、数组指针和指针数组

①数组指针:是指针,指向数组。例:int (*arr)[10]

②指针数组:是数组,数组内容存放的是指针。例:int *arr[10]

然后,需要明确一个优先级顺序:()>[]>*

所以:

(*p)[n]:根据优先级,先看括号内,则p是一个指针,这个指针指向一个一维数组,数组长度为n,这是“数组的指针”,即数组指针;

*p[n]:根据优先级,先看[],则p是一个数组,再结合*,这个数组的元素是指针类型,共n个元素,这是“指针的数组”,即指针数组。

1、指针数组

看代码:

 输出结果:

首先,对于语句int*p[4],因为[ ]的优先级要比*要高,所以 p 先与[ ]结合,构成一个数组的定义,数组名为 p,而int*修饰的是数组的内容,即数组的每个元素。

也就是说,该数组包含 4 个指向int类型数据的指针,如图所示,因此,它是一个指针数组。

2、数组指针

看代码:

 结果为:

其次,对于语句int(*arr)[4],“( )”的优先级比[ ]高,*号和 arr 构成一个指针的定义,指针变量名为arr,而int 修饰的是数组的内容,即数组的每个元素。

也就是说,arr 是一个指针,它指向一个包含 4 个int类型数据的数组,如图 所示。很显然,它是一个数组指针。

 分享到这里就结束了,希望能够给你带来帮助,如果有想要了解学习的内容也可以私信或者留言,说不定哪天就等来了呢~

 【学习资料】给大家分享一些c语言学习资料

进群可领取网盘资料包:878708054

c代码这样调试更高效

C语言编程基础

夯实C语言,从小白到大牛的进阶之路!

指针

指针换装你还认识吗

C语言控制led灯

Linux C语言高级开发

进群可领取网盘资料包:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值