数组和函数预习中值得注意的地方

1.数组认知

 数组在内存存放是有地址的,数组名就是数组在内存存放的数组首元素地址。将数组作为实参传递给形参有值传递和地址传递两种方式,值传递不会改变数组的值,地址传递有可能改变数组的值。

 char a[ MAX ] ;系统将分配MAX个字符的内存空间。

2.数组常见的问题

 对于一个数组 char a[ MAX ],来说,它的第一个和最后一个元素分别是a[ 0 ] 和 a [ MAX -1 ];其中  a[ MAX ] 是一个有效的地址,但该地址中的并不是数组a 的一个元素。我们应该尽量避免查看和使用 a[ MAX ] 。

 数组的元素可以是任何一种类型,而字符串只是一个特别的数组。

3.可不可以把另外一个地址赋给一个数组名

 不可以!数组名不能被放在赋值运算符的左边(它不是一个左值,更不是一个可修改的值),一个数组是一个对象,而它的数组名就是指向这个对象的第一个元素的指针。数组名的含义是:这里是一个数组中的第一个元素,它的前面没有数组元素,并且只有通过数组下标才能引用它后面的元素。

4.函数的声明与定义

 无参函数的定义形式:

类型标识符   函数名   ()                 其中,类型标识符和函数名称称为函数头。函数的类型是函数返回值的类型;函数名

{                                                 是由用户定义的标识符,函数名后面的括号不可少。

 语句

}


 有参函数的定义形式:

类型标识符   函数名   (形式参数表列)                 有参函数比无参函数多了形式参数(形参)表列,形参可以是各种类型的

{                                                                     变量,各参数之间用逗号间隔。在进行函数调用时,主调函数会将赋予形参实

 声明部分                                                 际的值。形参表中必须给出形参的类型说明。

 语句

}

5.形式参数和实际参数

 函数在调用时把一些表达式作为参数传递给函数。函数定义中的参数是形式参数,函数的调用者提供给函数的参数是实际参数。在函数调用之前,实际参数的值将被复制到这些形式参数中。

6.参数传递

 在c语言中发生有参函数调用时,实参变量和形参变量之间的数据都是单项的“值传递”方式,包括指针变量和数组名作参数的情况。

 简单变量和数组元素作为函数参数时,只需将变量的值复制一份到形参中操作,在被调用函数中形参和实参不在同一内存单元中,在调用结束后形参所占的内存单元被释放,因此调用函数不会影响到实参变量的值,也不会影响到主调函数中其他变量的值。

 指针变量作为函数参数时,值传递和上述值传递无区别,但发生地址传递时,这个地址为形参访问其所指定的变量创造了可靠条件;数组名作为函数参数时,作为实参时其传递给形参的是内存中某个指定的地址,调用过程中形参数组和实参数组占用同一段内存单元,因此对形参数组的操作也就是对实参数组的操作。

7.编写多个返回值的C语言函数

 return返回函数值只能返回一个值,想要编写返回多个返回值的C语言函数,有三种方法:利用全局变量、传递数组指针、传递结构体指针。利用全局变量,我们可以考虑把要返回的多个值定义成全局变量。当函数被调用时,全局变量被更改,我们再把个更改后的全局变量值应用于主调函数中,函数被调用后被更改后的全局变量值即为函数的整个返回值。注意:这种方法不能保证值得正确性,因为在程序范围内都可以修改它的值,如果出错将难以发现,而且全局变量增加例程序间模块的耦合,所以要慎用。

8.回调函数

 回调函数是C语言里面对函数指针的高级应用。回调函数就是一个通过函数指针调用的函数。如果把函数指针(函数的入口地址)传递给另一个函数,当这个函数指针被用来调用它所指向的函数时,那这个函数是回调函数。

9.变参函数:printf的实现

 printf()函数的原型为:

int  printf( const  char * format ,. . .);它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的,(用三个点“. . . ”作为占位符)。

10.可变参数问题:运行时才确定的参数

 函数参数的具体形式可以在运行时才确定:main( )函数可以实现。原型为:

int  main  (int  argc  ,char  *argv [ ]  );函数的参数是argc 和argv

没有办法从声明中看到所接收的参数,参数根本没有固定的形式,我们可以定义一个“void *”类型的参数,用它来指向实际的参数区,然后在函数中根据需要解释它们的含义。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值