Objective-C-2.0程序设计-第13章-基本的C语言特性.ppt

上传人:豆**** 文档编号:23879033 上传时间:2022-07-02 格式:PPT 页数:118 大小:257.50KB
返回 下载 相关 举报
Objective-C-2.0程序设计-第13章-基本的C语言特性.ppt_第1页
第1页 / 共118页
Objective-C-2.0程序设计-第13章-基本的C语言特性.ppt_第2页
第2页 / 共118页
点击查看更多>>
资源描述

《Objective-C-2.0程序设计-第13章-基本的C语言特性.ppt》由会员分享,可在线阅读,更多相关《Objective-C-2.0程序设计-第13章-基本的C语言特性.ppt(118页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、武汉大学国际软件学院Objective-C 2.0程序设计目录目录v13.1 数组数组v13.2 函数函数v13.3 结构结构v13.4 指针指针v13.5 联合联合v13.6 他们不是对象他们不是对象v13.7 其他语言特性其他语言特性v13.8 工作原理工作原理武汉大学国际软件学院Objective-C 2.0程序设计13.1 数组数组v Objective-C提供了一项功能,它允许用户义提供了一项功能,它允许用户义一组有序的数据项,即数组。一组有序的数据项,即数组。v在在Objective-C中,可以定义一个名为中,可以定义一个名为grades的数组,它代表的不是一个成绩值,而是一组成的

2、数组,它代表的不是一个成绩值,而是一组成绩值。然后通过名为索引或下标的数字来引用其绩值。然后通过名为索引或下标的数字来引用其中各个元素。中各个元素。vx数组中的第数组中的第i个元素表示为个元素表示为xi。 grades5名为grades的数组中索引为5的元素v数组元素以数组元素以0索引开头。索引开头。 grades0grades数组中第一个元素武汉大学国际软件学院Objective-C 2.0程序设计13.1 数组数组v任何一个数组元素都可以用在可用常规变量的地任何一个数组元素都可以用在可用常规变量的地方。方。 g = gradesi 以上表达式使用索引为i的grades数组元素的值,并将它赋

3、给变量g grades100 = 95 将数值95存储到grades数组中索引为100的元素中武汉大学国际软件学院Objective-C 2.0程序设计13.1 数组数组v改变数组下标的变量值,可以浏览数组中的元素改变数组下标的变量值,可以浏览数组中的元素 for ( i = 0; i 100; +i ) sum += gradesi; 依次浏览数组grades的前100个元素(元素099),并将每个成绩相加之和赋给变量sum。 for循环结束之后,遍历sum包含数组grades的前100个元素值之和。武汉大学国际软件学院Objective-C 2.0程序设计13.1 数组数组v在使用数组之前

4、必须先声明数组。在使用数组之前必须先声明数组。v数组的声明涉及声明数组所包含元素的数值类型,数组的声明涉及声明数组所包含元素的数值类型,如如int、float或者对象,以及将存储在数组中的或者对象,以及将存储在数组中的最大元素数目。最大元素数目。 Fraction *fracts 100; 声明fracts为包含100个分数的数组。通过使用下表099,可以有效的引用该数组的元素。 fracts2 = fracts0 add: fracts1; 调用Fraction类的add:方法,将数组fracts的前两个分数相加,并将结果存储到数组第三个位置。武汉大学国际软件学院Objective-C 2.

5、0程序设计13.1 数组数组v代码清单代码清单13-1产生斐波那契数的前产生斐波那契数的前15个值列表,个值列表,尝试预测输出结果。尝试预测输出结果。v前两个斐波那契数,我们称之为前两个斐波那契数,我们称之为F0和和F1,分别定,分别定义为义为0和和1。此后的每个斐波那契数。此后的每个斐波那契数Fi都定义为前都定义为前两个斐波那契数两个斐波那契数Fi-2和和Fi-1。v程序通过计算程序通过计算Fibonacci0和和Fibonacci1之和,就可以直接计算出之和,就可以直接计算出Fibonacci2。这个。这个计算公式是在计算公式是在for循环中执行的,它计算出循环中执行的,它计算出F2到到F

6、14的值。的值。武汉大学国际软件学院Objective-C 2.0程序设计13.1 数组数组Program 13.1/ Program to generate the first 15 /Fibonacci numbers#import int main (int argc, char *argv)NSAutoreleasePool * pool = NSAutoreleasePool alloc init;int Fibonacci15, i;Fibonacci0 = 0; /* by definition */Fibonacci1 = 1; /* ditto */for ( i = 2;

7、i 15; +i )Fibonaccii = Fibonaccii-2 + Fibonaccii-1;for ( i = 0; i 15; +i )NSLog (”%i”, Fibonaccii);pool drain;return 0;Program 13.1 Output01123581321345589144233377武汉大学国际软件学院Objective-C 2.0程序设计13.1.1 数组元素的初始化数组元素的初始化v在变量申明时可以给它赋初值,也可以给数组元在变量申明时可以给它赋初值,也可以给数组元素赋初值。通过简单的列出数组元素的初值,并素赋初值。通过简单的列出数组元素的初值,

8、并以第一个元素开始,就可以实现。列表中的值由以第一个元素开始,就可以实现。列表中的值由逗号隔开,并且整个列表放于一对大括号之内。逗号隔开,并且整个列表放于一对大括号之内。 int integers5 = 0,1,2,3,4; 将0赋给integers0,1赋给integers1,2赋给integers2,依此类推。v字符数组以同样的方式初始化,所以表达式字符数组以同样的方式初始化,所以表达式 char letters5 = a, h, c, d, e ; 定义了字符数组letters,并将5个元素分别初始化为字符a、b、c、d和e。武汉大学国际软件学院Objective-C 2.0程序设计13

9、.1.1 数组元素的初始化数组元素的初始化v不必完全初始化整个数组。比如:不必完全初始化整个数组。比如: float sample500=100.0, 200.0, 500.5; 前三个元素被初始化为100.0,200.0,500.5而其余497个元素被设为0。v通过将元素编号放在大括号内可以任意顺序的初通过将元素编号放在大括号内可以任意顺序的初始化指定的数组元素。比如:始化指定的数组元素。比如: int x = 1233; int a = 9 = x + 1, 2 = 3, 1 = 2, 0 = 1 ; 定义了一个名为a的10个元素数组(根据数组中最大索引得出的),并将数组的最后一个元素初始

10、化为x+1 (1234)。此外,它的前3个元素分别被初始化为1、2和3。武汉大学国际软件学院Objective-C 2.0程序设计13.1.2 字符数组字符数组v代码清单代码清单13-2的目的是阐明如何使用字符数组。的目的是阐明如何使用字符数组。Program 13.2#import int main (int argc, char *argv)NSAutoreleasePool * pool = NSAutoreleasePool alloc init;char word = H, e, l, l, o, ! ;int i;for ( i = 0; i 6; +i )NSLog (”%c”,

11、 wordi);pool drain;return 0;Program 13.2 OutputHello!武汉大学国际软件学院Objective-C 2.0程序设计13.1.2 字符数组字符数组v字符数组字符数组word的声明没有指出数组中的元素个的声明没有指出数组中的元素个数。数。 Objective-C语言允许定义没有指明元素语言允许定义没有指明元素个数的数组。如果是这样定义的,则自动根据初个数的数组。如果是这样定义的,则自动根据初始化元素的数目确定该数组大小。始化元素的数目确定该数组大小。v如果在字符数组结尾添加一个终止空字符如果在字符数组结尾添加一个终止空字符0,就产生了一个通常称为字

12、符串的变量。,就产生了一个通常称为字符串的变量。 char word = H, e, l, l, o, !, 0 ; NSLog (”%s”, word); 格式字符告诉printf持续显示字符直到到达终止空字符,也就是在word数组最后添加的字符,所以该语句没有问题。武汉大学国际软件学院Objective-C 2.0程序设计13.1.3 多维数组多维数组v二维数组最自然的应用之一是矩阵,考虑下面的二维数组最自然的应用之一是矩阵,考虑下面的4x5矩阵:矩阵: 105 3 17 82 9 0 0 8 7 32 20 10 14 0 087 6v数学中,通过双下标来引用矩阵中的元素。如果数学中,通

13、过双下标来引用矩阵中的元素。如果将上面的矩阵命名为将上面的矩阵命名为M,符号符号Mi,j则代表在第则代表在第i行第行第j列的元素,列的元素,i的范围从的范围从1到到4,j的范围从的范围从1到到5。vObjective-C语言中,引用二维数组的元素时语言中,引用二维数组的元素时类似。但是类似。但是Objective-C语言从语言从0开始计数,所开始计数,所以矩阵的第一行实际上是以矩阵的第一行实际上是0行,而第一列是行,而第一列是0列。列。武汉大学国际软件学院Objective-C 2.0程序设计13.1.3 多维数组多维数组v在数学上使用符号在数学上使用符号Mi,j,而而Ojective-C语言

14、中使语言中使用等价的符号用等价的符号Mij。v第一个索引指的是行数,第二个索引指的是列数。第一个索引指的是行数,第二个索引指的是列数。v定义二维数组的方式和一维数组的相同。定义二维数组的方式和一维数组的相同。 int M4 5; 声明M为4行5列的二维数组,总共包含20个元素。数组中的每个位置都包含整型值。武汉大学国际软件学院Objective-C 2.0程序设计13.1.3 多维数组多维数组v初始化二维数组的方法类似于一维等价数组的初初始化二维数组的方法类似于一维等价数组的初始化方式。始化方式。v列出初始化元素时,它们的值是根据行排列的。列出初始化元素时,它们的值是根据行排列的。大括号对用来

15、分隔初始化的各行。大括号对用来分隔初始化的各行。v因此,要将数组因此,要将数组M定义和初始化为前面表中列出定义和初始化为前面表中列出的元素,可以使用下面的表达式:的元素,可以使用下面的表达式: int M45 = 10, 5, -3, 17, 82 , 9, 0, 0, 8, -7 , 32, 20, 1, 0, 14 , 0, 0, 8, 7, 6 ;武汉大学国际软件学院Objective-C 2.0程序设计13.1.3 多维数组多维数组v除了最后一行,毎行结束的大括号之后必须加上除了最后一行,毎行结束的大括号之后必须加上逗号。逗号。v内层括号可以省略。如果没有内层括号,将按行内层括号可以省

16、略。如果没有内层括号,将按行进行初始化。进行初始化。 int M45 = 10, 5, -3, 17, 82, 9, 0, 0, 8, -7, 32, 20, 1, 0, 14, 0, 0, 8, 7, 6 ;v不必初始化整个二维数组,未被初始化的值都设不必初始化整个二维数组,未被初始化的值都设为为0。此时需要花括号对,以强制正确的初始化。此时需要花括号对,以强制正确的初始化。 int M45 = 10, 5, -3 , 9, 0, 0 , 32, 20, 1 , 0, 0, 8 ;武汉大学国际软件学院Objective-C 2.0程序设计13.2 函数函数v每个程序中接触到的每个程序中接触到

17、的NSLog例程就是一个函数例程就是一个函数例子。事实上,每个程序还用到一个名为例子。事实上,每个程序还用到一个名为main的函数。的函数。v回顾你编写的第一个程序(代码淸单回顾你编写的第一个程序(代码淸单2-1),它在它在终端显示终端显示 programming is fun.这个短语:这个短语: #import int main (int argc, char *argv)NSAutoreleasePool * pool = NSAutoreleasePool alloc init;NSLog (”Programming is fun.”);pool drain;return 0;武汉大学

18、国际软件学院Objective-C 2.0程序设计13.2 函数函数v下面是名为下面是名为printMessage的函数,它产生同的函数,它产生同样的结果:样的结果:v函数函数printMessage和代码清单和代码清单2-1 main函函数的唯一区别在第一行。第一行函数定义告诉编数的唯一区别在第一行。第一行函数定义告诉编译器关于该函数的译器关于该函数的4件事情。件事情。 谁可以调用这个函数 函数的返回值类型 函数的名称 函数使用的参数数目和类型void printMessage (void)NSLog (”Programming is fun.”);武汉大学国际软件学院Objective-C

19、 2.0程序设计13.2 函数函数v 函数函数printMessage的第一行告诉编译器的第一行告诉编译器printMessage是这个函数的名称,并且该函数不返回是这个函数的名称,并且该函数不返回 任何值(第一个任何值(第一个void关键字的用途)。与方法不同,不关键字的用途)。与方法不同,不必将函数的返回值类型放在一对圆括号中。必将函数的返回值类型放在一对圆括号中。v 第二个第二个void关键字的用途说明该函数没有任何参数。关键字的用途说明该函数没有任何参数。v 在在Objective-C系统中,系统中,main是一个特别的名称,它是一个特别的名称,它是指示程序开始运行的位置,每个程序都必

20、须有一个是指示程序开始运行的位置,每个程序都必须有一个main函数。函数。武汉大学国际软件学院Objective-C 2.0程序设计13.2 函数函数v 向前面的代码添加一个向前面的代码添加一个main函数,以完成这个程序,如函数,以完成这个程序,如代码凊单代码凊单13-3所示。所示。Program 13.3#import void printMessage (void)NSLog (”Programming is fun.”);int main (int argc, char *argv)NSAutoreleasePool * pool = NSAutoreleasePool alloc i

21、nit;printMessage ();pool drain;return 0;Program 13.3 OutputProgramming is fun.武汉大学国际软件学院Objective-C 2.0程序设计13.2 函数函数v 代码清单代码清单13-3包含两个函数:包含两个函数:printMessage和和mainv 因为因为printMessage不带有参数,所以可以简单地在名不带有参数,所以可以简单地在名称后面添加一对左右圆括号来调用它。称后面添加一对左右圆括号来调用它。武汉大学国际软件学院Objective-C 2.0程序设计13.2.1 参数和局部变量参数和局部变量v通过该函数

22、的一个参数,指要计算哪个三角数。通过该函数的一个参数,指要计算哪个三角数。然后这个函数计算出所求的数值并显示结果。代然后这个函数计算出所求的数值并显示结果。代码清单码清单13-4显示了完成这项任务的函数和测试显示了完成这项任务的函数和测试它的它的main例程。例程。Program 13.4#import / Function to calculate the nth triangular numbervoid calculateTriangularNumber (int n)int i, triangularNumber = 0;for ( i = 1; i = n; +i )triangul

23、arNumber += i;NSLog (”Triangular number %i is %i”, n, triangularNumber);武汉大学国际软件学院Objective-C 2.0程序设计13.2.1 参数和局部变量参数和局部变量int main (int argc, char *argv)NSAutoreleasePool * pool = NSAutoreleasePool alloc init;calculateTriangularNumber (10);calculateTriangularNumber (20);calculateTriangularNumber (50

24、);pool drain;return 0;Program 13.4 OutputTriangular number 10 is 55Triangular number 20 is 210Triangular number 50 is 1275武汉大学国际软件学院Objective-C 2.0程序设计13.2.1 参数和局部变量参数和局部变量v函数函数 calculateTriangularNumber的第一的第一行是行是 void calculateTriangularNumber (int n)v它告知编译器它告知编译器calculateTriangularNumber是一个函数,不返回任

25、何值(关键字是一个函数,不返回任何值(关键字void)并且并且 带有一个名为带有一个名为n的的int参数。参数。v不能像编写方法那样,将参数类型放在圆括号中。不能像编写方法那样,将参数类型放在圆括号中。v因为要计算第因为要计算第n个三角数,所以必须设置一个变个三角数,所以必须设置一个变量,量, 以便在计算过裎中储存三角数的值以便在计算过裎中储存三角数的值(TriangularNumber)。还需要一个变量作为。还需要一个变量作为循环的索引循环的索引(i)。武汉大学国际软件学院Objective-C 2.0程序设计13.2.1 参数和局部变量参数和局部变量v函数中局部变量的行为同方法中的一样:如

26、果在函函数中局部变量的行为同方法中的一样:如果在函数内给变量赋予初始值,那么每次调用该函数时,数内给变量赋予初始值,那么每次调用该函数时,都会指定相同的初始值。都会指定相同的初始值。v在函数中(和在方法中一样)定义的变量称为自动在函数中(和在方法中一样)定义的变量称为自动局部变量,因为每次调用该函数时,它局部变量,因为每次调用该函数时,它 们都自动们都自动“创建创建”,井且它们的值对于函数来说是局部的。,井且它们的值对于函数来说是局部的。v静态局部变量用关键字静态局部变量用关键字static声明,它们的值在函声明,它们的值在函数调用的过程中保留下来,并且初始值默认为数调用的过程中保留下来,并且

27、初始值默认为0。v局部变量的值只能在定义该变量的函数中访问。它局部变量的值只能在定义该变量的函数中访问。它的值不能从函数之外访问。的值不能从函数之外访问。武汉大学国际软件学院Objective-C 2.0程序设计13.2.1 参数和局部变量参数和局部变量v 在在main函数中,数值函数中,数值10是在第一次调用函数是在第一次调用函数calculateTriangularNumber时作为参数传递的。时作为参数传递的。然后,执行直接转换到该函数,数值然后,执行直接转换到该函数,数值10成为函数中形参成为函数中形参n的值。然后,该函数计算出第的值。然后,该函数计算出第10个三个三 角数的值并显示角

28、数的值并显示结果。结果。v 再次调用函数再次调用函数calculateTriangularNumber时,传时,传递参数递参数20。经过与前面描述相似的过程,该数值成为函经过与前面描述相似的过程,该数值成为函数中数中n值。然后,该函数计算出第值。然后,该函数计算出第20个三角数的值并显个三角数的值并显示答案。示答案。武汉大学国际软件学院Objective-C 2.0程序设计13.2.2 函数的返回结果函数的返回结果v和方法一样,函数也可以返回值。和方法一样,函数也可以返回值。Return语句语句返回的值类型必须和函数声明的返回类型一返回的值类型必须和函数声明的返回类型一 致。致。 float

29、kmh_to_mph (float km_speed) 定义了函数kmh_to_mph,它使用一个名为km_speed的float参数,并返回浮点型小数。武汉大学国际软件学院Objective-C 2.0程序设计13.2.2 函数的返回结果函数的返回结果v代码清单代码清单13-5使用函数重新编写代码清单使用函数重新编写代码清单5-7中求最大公约数的算法。中求最大公约数的算法。Program 13.5#import / This function finds the greatest common divisor of two/ nonnegative integer values and re

30、turns the resultint gcd (int u, int v)int temp;while ( v != 0 )temp = u % v;u = v;v = temp;return u;武汉大学国际软件学院Objective-C 2.0程序设计13.2.2 函数的返回结果函数的返回结果main ()NSAutoreleasePool * pool = NSAutoreleasePool alloc init;int result;result = gcd (150, 35);NSLog (”The gcd of 150 and 35 is %i”, result);result

31、= gcd (1026, 405);NSLog (”The gcd of 1026 and 405 is %i”, result);NSLog (”The gcd of 83 and 240 is %i”, gcd (83, 240);pool drain;return 0;Program 13.5 OutputThe gcd of 150 and 35 is 5The gcd of 1026 and 405 is 27The gcd of 83 and 240 is 1武汉大学国际软件学院Objective-C 2.0程序设计13.2.2 函数的返回结果函数的返回结果v函数函数gcd规定带有

32、两个整型参数。该函数通过形规定带有两个整型参数。该函数通过形参名称参名称u和和v来指明这些参数。将变量来指明这些参数。将变量temp 声声明为整型之后,该程序将在终端显示参数明为整型之后,该程序将在终端显示参数u、v的值和相关消息。然后,这个函数计算并返回这的值和相关消息。然后,这个函数计算并返回这两个整数的最大公约数。表达式两个整数的最大公约数。表达式 result = gcd (150, 35); 使用参数150和35来调用函数gcd,并且将返回值存储到变量result。v若省略函数的返回类型声明,如果该函数确实返若省略函数的返回类型声明,如果该函数确实返回任何值,编译器就会假设该值为整数

33、。回任何值,编译器就会假设该值为整数。武汉大学国际软件学院Objective-C 2.0程序设计13.2.2 函数的返回结果函数的返回结果vOjective-C语言编译器假设函数的默认返回值语言编译器假设函数的默认返回值是整型值。无论什么时候调用一个函数,编译器是整型值。无论什么时候调用一个函数,编译器都会假设这个函数的返回类型为都会假设这个函数的返回类型为int,除非发生,除非发生以下两种情况之一:以下两种情况之一: 在遇到函数调用之前,已经在程序中定义了该函数。 在遇到函数调用之前,已经声明了函数的返回值类型。声明函数的返回值类型和参数类型称为原型(prototype)声明。v函数声明不仅

34、用于声明函数的返回类型,而且用函数声明不仅用于声明函数的返回类型,而且用于告知编译器,该函数带有多少参数及其类型。于告知编译器,该函数带有多少参数及其类型。这类似于定义新类时在这类似于定义新类时在interface部分中声明部分中声明方法。方法。武汉大学国际软件学院Objective-C 2.0程序设计13.2.2 函数的返回结果函数的返回结果v要将要将absoluteValue定义为一个返回定义为一个返回float型型值并带有一个值并带有一个float类型参数的函数,可以使用类型参数的函数,可以使用以下原型声明:以下原型声明: float absoluteValue (float);v可以看

35、到,只需要在圆括号中指定参数类型,而可以看到,只需要在圆括号中指定参数类型,而不是参数名称。如果愿意,可以选择在类型之后不是参数名称。如果愿意,可以选择在类型之后指定指定“伪伪”名称:名称: float absoluteValue (float x); 这个名称和函数定义所用到的不必相同,编译器会忽略它。v编写原型声明最简单的方法是简单地复制函数实编写原型声明最简单的方法是简单地复制函数实际定义的第一行代码,记住在结尾处添加分号。际定义的第一行代码,记住在结尾处添加分号。武汉大学国际软件学院Objective-C 2.0程序设计13.2.2 函数的返回结果函数的返回结果v如果函数的参数数目不定

36、如果函数的参数数目不定(比如比如NSLog和和scanf),必须告知编译器。如下声明:必须告知编译器。如下声明: void NSLog (NSString *format, .);v告知编译器:告知编译器:NSLog将使用一个将使用一个NSString对对象作为它的第一个参数,之后是任意数目的附加象作为它的第一个参数,之后是任意数目的附加参数参数(的用途的用途)。NSLog和和scanf在一个特殊在一个特殊文件文件Foundation/Foundation.h中声明,这中声明,这就是为什就是为什 么要在每个程序的开头添加下面一行么要在每个程序的开头添加下面一行语句。语句。 #import 如果

37、没有这一行语句,编译器可以假设NSLog使用固定数目的参数,这可以导致产生不正确的代码。武汉大学国际软件学院Objective-C 2.0程序设计13.2.2 函数的返回结果函数的返回结果v只有已经在调用函数之前添加了函数的定义或声只有已经在调用函数之前添加了函数的定义或声明了该函数及其参数类型时,编译器才会在调用明了该函数及其参数类型时,编译器才会在调用该函数时自动将参数转换成相应的类型。该函数时自动将参数转换成相应的类型。v下面是关于函数的一些注意事项和建议:下面是关于函数的一些注意事项和建议: 默认情况下,编译器假设函数返回int 定义返回值为int的函数时,直接将它定义为int 当定义

38、没有返回值的函数时,将它定义为void 只有当前面已经定义或声明了这个函数,编译器才会将参数转换成函数认可的类型武汉大学国际软件学院Objective-C 2.0程序设计13.2.2 函数的返回结果函数的返回结果v在程序中声明所有函数,即使它们在被调用之前在程序中声明所有函数,即使它们在被调用之前巳经定义了(将来你可能决定将这些函数移到文巳经定义了(将来你可能决定将这些函数移到文件的其他位置或者移到另一个文件中)。好的策件的其他位置或者移到另一个文件中)。好的策略是将函数声明放到一个头文件中,然后只将这略是将函数声明放到一个头文件中,然后只将这个头文件导入个头文件导入(import)你的模块即

39、可。你的模块即可。v函数的默认作用域是任何与该函数链接在一起的函数的默认作用域是任何与该函数链接在一起的文件中的任何函数或方法都可以调用它。通过将文件中的任何函数或方法都可以调用它。通过将其定义为其定义为static (静态静态)可以限制函数的作用域。可以限制函数的作用域。将关键字将关键字static放在函数声明前即可,如下所示:放在函数声明前即可,如下所示: Static int gcd (int u, int v) v静态函数只可以由和该函数定义位于同一文件的静态函数只可以由和该函数定义位于同一文件的其他函数或者方法调用。其他函数或者方法调用。武汉大学国际软件学院Objective-C 2

40、.0程序设计13.2.3 函数、方法和数组函数、方法和数组v要向函数或方法传递单个数组元素,使用常规方要向函数或方法传递单个数组元素,使用常规方式将数组元素指定为参数。因此,如果有一个用式将数组元素指定为参数。因此,如果有一个用来计算平方根的函数来计算平方根的函数squareRoot,并且想要计并且想要计算算averagesi的平方根并将结果赋给名为的平方根并将结果赋给名为 sq_root_result的变量,使用如下表达式即可:的变量,使用如下表达式即可: sq_root_result = squareRoot (averagesi);v向函数或方法传递整个数组是完全不同的情况。向函数或方法

41、传递整个数组是完全不同的情况。要传递数组,只需在函数调用或者方法调用中列要传递数组,只需在函数调用或者方法调用中列出数组名称,并且不需要任何下标。下面的表达出数组名称,并且不需要任何下标。下面的表达式将数组式将数组grade_scores中的中的100个元素都传个元素都传递给名为递给名为minimum的函数。的函数。 minimum (grade_scores) 武汉大学国际软件学院Objective-C 2.0程序设计13.2.3 函数、方法和数组函数、方法和数组v下面有一个函数,它寻找包含指定元素个数的数下面有一个函数,它寻找包含指定元素个数的数组中的最小整数值:组中的最小整数值:/ Fu

42、nction to find the minimum in an arrayint minimum (int values, int numElements)int minValue, i;minValue = values0;for ( i = 1; i numElements; +i )if ( valuesi minValue )minValue = valuesi;return (minValue);武汉大学国际软件学院Objective-C 2.0程序设计13.2.3 函数、方法和数组函数、方法和数组v 函数函数minimum定义为带有两个参数定义为带有两个参数:第一个是要査找最第一

43、个是要査找最小数的数组,第二个是数组中的元素个数。在函数头中,小数的数组,第二个是数组中的元素个数。在函数头中,values之后的一对方括号用来告知之后的一对方括号用来告知Objective-C编译器:编译器:values是整型数组。是整型数组。 编译器并不关心这个数组有多大。编译器并不关心这个数组有多大。v 如果函数或者方法更改了数组元素的值,那么这个变化将如果函数或者方法更改了数组元素的值,那么这个变化将影响到传递到该函数或方法的原始数组,而且这个变化在影响到传递到该函数或方法的原始数组,而且这个变化在函数或方法执行完之后依然有效。函数或方法执行完之后依然有效。 调用函数或方法时,作为参数

44、传递的值将被复制到相应的形参中。但是,使用数组时,并非将整个数组的内容复制到形参数组中。而是传递一个指针,它表示数组所在的计算机内存地址。所以,对形参数组所作的所有更改实际上都是对原始数组而不是数组的副本执行的。因此,函数或方法返回时,这些变化仍然有效。武汉大学国际软件学院Objective-C 2.0程序设计13.2.3 函数、方法和数组函数、方法和数组v 多维数组元素可以像任何普通变量或一维数组元素那样多维数组元素可以像任何普通变量或一维数组元素那样传递给函数或方法。语句:传递给函数或方法。语句: result = squareRoot (matrixij); 调用squareRoot函数

45、,同时传递matrixij中包含的值作为参数v 整个多维数组可以像一维数组那样当作参数传递:只要整个多维数组可以像一维数组那样当作参数传递:只要列出数组名称即可。比如,如果将矩阵列出数组名称即可。比如,如果将矩阵measuredValuesmeasuredValues声明为整型二维数组,那么声明为整型二维数组,那么Objective-CObjective-C语句:语句: scalarMultiply (measuredValues, constant); 可以用来调用一个函数,它通过值constant求出该矩阵每个元素的乘积。在函数中任何对形参数组元素的陚值操作都会永久地更改向该函数传递的数组

46、。武汉大学国际软件学院Objective-C 2.0程序设计13.2.3 函数、方法和数组函数、方法和数组v 将一个单维数组声明为形参时,规定不需指定数组的实将一个单维数组声明为形参时,规定不需指定数组的实际大小。简单地使用一对空方括号来告知编译器这个参际大小。简单地使用一对空方括号来告知编译器这个参数实际上是个数组就足够了。这并不完全适用于多维数数实际上是个数组就足够了。这并不完全适用于多维数组的情况。组的情况。v 对于二维数组,数组的行数可以省略,但是声明必须包对于二维数组,数组的行数可以省略,但是声明必须包括数组的列数。如下声明对于括数组的列数。如下声明对于100行行50列的形参数组列的

47、形参数组arrayValues都是合法声明。都是合法声明。 int arrayValues10050 int arrayValues50v 但是下面的声明不是合法声明,因为必须指明数组的列但是下面的声明不是合法声明,因为必须指明数组的列数。数。 int arrayValues100 int arrayValues武汉大学国际软件学院Objective-C 2.0程序设计13.3 结构结构v除了数组之外,除了数组之外,Objective-C语言还提供了另语言还提供了另一种组合元素的工具。结构就是这种工具,它构一种组合元素的工具。结构就是这种工具,它构成了本节讨论的基础。成了本节讨论的基础。v假设

48、要在程序中存储日期(比如说假设要在程序中存储日期(比如说7/18/03,在在Objective-C语言中,可以定义一个名为语言中,可以定义一个名为date的结构,它包含三个分别代表年、月、日的结构,它包含三个分别代表年、月、日的成分。这种定义的语法相当直观,如下所示:的成分。这种定义的语法相当直观,如下所示: struct dateint month;int day;int year;武汉大学国际软件学院Objective-C 2.0程序设计13.3 结构结构vdate结构恰好定义了三个整型元素,分别名为结构恰好定义了三个整型元素,分别名为month、day和和year。vdate的定义指出了

49、的定义指出了Objective-C语言中的新类语言中的新类型,这是由于随后就可以如下将变量声明为型,这是由于随后就可以如下将变量声明为struct date 类型:类型: struct date today;v还可以如下另外定义一个名为还可以如下另外定义一个名为purchaseDate的同类型变量:的同类型变量: date purchaseDatev在同一行中包含两个定义,如下面一行所示:在同一行中包含两个定义,如下面一行所示: struct date today, purchaseDate;武汉大学国际软件学院Objective-C 2.0程序设计13.3 结构结构v不同于不同于int、fl

50、oat或或char型变量,处理结构变型变量,处理结构变量时需要特殊语法。通过指明变量名称,在之后量时需要特殊语法。通过指明变量名称,在之后加上句点(称为点运算符)来访问结构成员。举加上句点(称为点运算符)来访问结构成员。举个例子,要将变量个例子,要将变量today的的day值设置为值设置为21,可以编写如下语句:可以编写如下语句: today.day = 21;v变量名、句点和成员名称之间不允许出现空格。变量名、句点和成员名称之间不允许出现空格。武汉大学国际软件学院Objective-C 2.0程序设计13.3 结构结构v代码清单代码清单13-6将前面的讨论合成一个实际的程将前面的讨论合成一个

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁