数组 & 函数 (1)

1.无参函数的定义形式

类型标识和函数名称为函数头。类型标识符指明了本函数的类型,函数的类型实际上是函数返回之类型,该类型标识符与前面介绍的各种说明符相同。函数名是由用户定义的标识符,函数名后有一个空括号,其中无参数,但括号不可少。

{}中的内容称为函数体。在很多情况下都不要求无参函数有返回值。此时函数类型符可以写void

2.有参函数定义的一般形式

有参函数比无参函数多了一个内容,即形式参数列表。在形参列表中给出的参数称为形式参数,他们可以是各种类型的变量,各参数之间用逗号间隔。

在进行函数调用时,主调函数将赋予这些形式参数实际的值。形参既然是变量,必须在形参表中给出形参的类型说明。

3.声明与定义不同

函数的声明就是声称一个函数的名字,只是说明函数的名字,不涉及函数的实现,即没有函数体,所以函数的声明只包括前3个部分。

函数的定义就是确定一个函数的含义,即让函数具有某项功能,但是这里可不是只有函数体,总要指明这个函数体是那个函数,所以函数的定义包含了一个函数的所有部分。

一般情况下,通过函数名就可以体现函的功能,这样的头文件中,通过函数的声明,就可以了解程序的大体结构,以及函数的功能,并且通过函数的声明,还可以使那些“只想使用某个函数”,而不关心函数的具体实现的用户,就可凭借声明中的“函数参数列表”就可以只知道该函数时需要提供的值,这样就可以使用这个函数。

4.机构体数组作为实参

符合结构体变量作为实参规则,采取单向“值传递”方式将结构体变量所占的内存单元的内容全部顺序复制给形参。

注意 当实参的成员中包含数组时,形参相应的成员接受到的是一个地址。

5.机构体数组名作为实参

同整形数组数组名作为实参一样,传递给形参的事内存中已指定单元的地址,调用过程中形参数组与是参数组占用同一段内存单元,因此对形参数组的操作也就是对实参数组的操作也就是对实参数组的操作,对数组的操作表现为双向性。

综上所述,在有参函数的调用时,实参变量与形参变量之间的数据都是单向“值传递”方式。至于调用过程中是否会改变主调函数中变量的值,则只需根据具体算法看被调函数是否会找到主调函数中变量所在内存单元并对其原本进行操作。

6.数组作为参数传递给函数时,可以通过sizeof得到数组的大小么

答案是不可以,当把数组作为函数的参数时,你无法在程序运行时通过数组参数本身告诉函数该数组的大小,因为函数的数组参数相当于指向该数组第一个元素的指针。

这意味着把数组传递给函数的效率非常高,也意味着程序员必须通过某种机制告诉函数数组参数的大小。

7.数组的下标总是从0开始吗?

是的,对数组a[MAX],来说,他的第一个和最后一个元素分别是a[0]和a[MAX-1],在其他一些语言中,情况可能有所不同,例如,在BASIC语言中数组的元素就是从 1 - MAX,在Pascal语言中则是两种方式都可行。

8.可以把另一个地址赋给一个数组名吗

答案是不可以,尽管在一个很常见的特例中好像可以。

数组名不能被放在赋值运算符的左边。一个数组是一个对象,而他的数组名就是指向这个对象的第一个元素的指针。

假如一个数组是用extern 或 static说明的,则他的数组名是在连接时可知的一个常量,你不能修改这样一个数组名,就像你不能修改7的值一样。

9.array_name 与 &array_name 有什么不同 

前者是指向数组中的第一个元素的指针,后者是指向整个数组的指针。

数组是一种类型,他有三个要素,即基本类型、大小、数组的值。你可以用一个指针指向整个数组的值。

10.为什么用const说明的常量不能用来定义一个数组的初始大小

并不是所有的常量都可以用来定义一个数组的初始大小,在C程序中,只有C语言的常量表达式才能用来定义一个数组的初始大小。然而,在C++中,情况有所不同。

一个常量表达式的值在程序的值在程序运行期间是不变的,并且是编译程序能计算出来的一个值。在定义数组的大小时,你必须使用常量表达式。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值