《《C语言程序设计教程》课件--第8章.ppt》由会员分享,可在线阅读,更多相关《《C语言程序设计教程》课件--第8章.ppt(56页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022-7-2222022-7-223变量的两个物理意义变量的两个物理意义 变量的内容变量的内容变量的地址变量的地址2022-7-2245382022-7-225532004p=&c82022-7-226200420002022-7-22720042000*p = &a;52022-7-228a ab bp1p1p2p2p p6 68 8a=6,b=8a=6,b=8max=8,min=6max=8,min=6【例【例8.1】输入】输入a、b两个整数,两个整数,使用指针变量按大小顺序输出使用指针变量按大小顺序输出这两个整数。这两个整数。 2022-7-229a a、* *p1p1b b、* *
2、p2p2p1p1p2p2t t6 68 8a=8,b=6a=8,b=6max=8,min=6max=8,min=66 68 86 62022-7-2210P1=404,*p1=10P2=410,*p2=403020104050 只有当指针变量指向数组时指针的加减只有当指针变量指向数组时指针的加减运算才有意义。运算才有意义。 指针变量可加减一个整型表达式。如:指针变量可加减一个整型表达式。如:p1+、p2+3、p2-、p2-2。 指针的加减运算是以基类型为单位指针的加减运算是以基类型为单位(即(即sizeof(类型)类型)) )的的。 两个指针变量不能作加法运算,只有当两个指针变量不能作加法运算
3、,只有当两个指针变量指向同一数组时,进行指针变两个指针变量指向同一数组时,进行指针变量相减才有实际意义。如:量相减才有实际意义。如:p2-p1。2022-7-22113020104050 指向同一数组的两个指针可以进行关系指向同一数组的两个指针可以进行关系运算,表明它们所指向元素的相互位置关系运算,表明它们所指向元素的相互位置关系 。如:如:p2 p1、p2 = p1。 指针与一个整型数据进行比较是没有意指针与一个整型数据进行比较是没有意义的义的 。 不同类型指针变量之间比较是非法的不同类型指针变量之间比较是非法的。 NULL可以与任何类型指针进行可以与任何类型指针进行=、!=的关系运算,用于
4、判断指针是否为空指针的关系运算,用于判断指针是否为空指针 。2022-7-2212a0a0a9a92022-7-2213a0a0a9a92022-7-2214a a00a a9912345678910 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 102022-7-2215a a00a a99102022-7-2216a0a0a9a9a1a1 . . . . . . . . . . . .1 12 23 34 45 56 67 78 89 910102022-7-2217 输入输入a数组数组 for (p=a; pa+4; p+) pp=p for (q=p+1
5、; q*q F pp=q T pp!=p F *pp*p 输出输出a数组数组图图8.9 选择法排序选择法排序N-S图图2022-7-22180 0101020201 1111121212 2121222223 313132323aa a00a a11a a22aa+1a+22022-7-22190 0101020201 1111121212 2121222223 313132323a0数组数组a1数组数组a2数组数组2022-7-22200 0101020201 1111121212 2121222223 313132323a a00a a11a a22a2022-7-22210 010102
6、0201 1111121212 2121222223 313132323a2022-7-22222022-7-22230 0101020201 1111121212 2121222223 313132323alplp+1lp+2 0 1 2 3 10 11 12 13 20 21 22 232022-7-22240 0101020201 1111121212 2121222223 313132323alplplplp 0 1 2 3 10 11 12 13 20 21 22 23 2022-7-2225字符串的两种表示方式:字符串的两种表示方式: 字符数组表示方式,字符串存放在一维数组中,字符
7、数组表示方式,字符串存放在一维数组中,引用时用数组名。引用时用数组名。 字符指针变量表示方式,字符指针变量存放字字符指针变量表示方式,字符指针变量存放字符串的首地址,引用时用指针变量名。符串的首地址,引用时用指针变量名。Good morning!Good night!2022-7-2226 将一个字符串赋给一个字符数组只能使用将一个字符串赋给一个字符数组只能使用strcpy函数函数 将字符串常量的首地址赋给指针变量,可使用赋值运将字符串常量的首地址赋给指针变量,可使用赋值运算符算符“=” How are you ?Fine,thanks.2022-7-2227 使用字符串输入输出函数使用字符串
8、输入输出函数gets和和puts; 在在scanf和和printf函数中使用函数中使用 %s格式实现。格式实现。 输入字符串时,函数参数:数组名、存有数组名的输入字符串时,函数参数:数组名、存有数组名的指针变量;指针变量; 输出字符串时,函数参数:数组名、存有字符串首输出字符串时,函数参数:数组名、存有字符串首地址的指针变量。地址的指针变量。 I love China! I love China! 2022-7-22282022-7-22292022-7-2230指针数组就是数组中的每个元素均为指针类型指针数组就是数组中的每个元素均为指针类型 2022-7-22312022-7-2232利用字
9、符指针数组处理长度不等的字符串,可节省利用字符指针数组处理长度不等的字符串,可节省存储空间。存储空间。 2022-7-2233整型值整型值整型变量整型变量整型变量地址整型变量地址一级指针变量一级指针变量一级指针变量地址一级指针变量地址二级指针变量二级指针变量 2022-7-2234a的内容的内容a&ap&ppp2022-7-2235pppppp2022-7-2236759 7775 75 2022-7-2237 2022-7-22382022-7-2239 由于指向二维数组的指针分为行指针和由于指向二维数组的指针分为行指针和元素指针,所以他们作为函数参数的形式也元素指针,所以他们作为函数参数的
10、形式也不同。不同。 2022-7-22402022-7-2241 指向二维数组元素的指针作函数参数指向二维数组元素的指针作函数参数时,是利用二维数组元素按行连续存储的的时,是利用二维数组元素按行连续存储的的特点,访问数组的每一个元素。特点,访问数组的每一个元素。被调函数的被调函数的形参必须定义为指向二维数组元素的指针变形参必须定义为指向二维数组元素的指针变量。量。2022-7-22422022-7-2243main函数只能有两个形参,并且这两个形参的函数只能有两个形参,并且这两个形参的类型也是固定的。第一个形参必须是整型变量,类型也是固定的。第一个形参必须是整型变量,第二个形参可以定义为字符型
11、指针数组,也可以第二个形参可以定义为字符型指针数组,也可以定义为二级字符指针变量,因此也可以写成定义为二级字符指针变量,因此也可以写成 main(int argc, char *argv)2022-7-2244 要调用带参数的主函数要调用带参数的主函数必须在操作系统环境下必须在操作系统环境下进行。假设进行。假设C语言源程序文件语言源程序文件file1.c,经过编译、,经过编译、连接生成一个可执行文件连接生成一个可执行文件file1.exe。在在DOS系统提系统提示符后键入示符后键入可执行文件名可执行文件名file1,即可执行该程序即可执行该程序 。2022-7-22452022-7-2246C
12、:file1 one two threeonetwothree 注意注意: : 命令行参数所传送的数据全部都是字符命令行参数所传送的数据全部都是字符串。即便传送的是数值,也是按字符串方式传送串。即便传送的是数值,也是按字符串方式传送给主函数。程序中使用这些参数时,还需要将数给主函数。程序中使用这些参数时,还需要将数字字符串转换成数值型数据。字字符串转换成数值型数据。C语言标准库函数语言标准库函数提供了一些相关的数据类型转换函数提供了一些相关的数据类型转换函数 。2022-7-2247 如果一个函数的返回值是指针,则称此函数如果一个函数的返回值是指针,则称此函数为指针型函数。为指针型函数。 20
13、22-7-22482022-7-22492022-7-2250 在在C C语言中,函数名具有与数组名类似的语言中,函数名具有与数组名类似的特性,数组名代表数组的首地址,特性,数组名代表数组的首地址,函数名代表函数名代表函数的起始地址函数的起始地址(即该函数的程序代码段在内(即该函数的程序代码段在内存中所占用的存储空间的首地址,也称函数入存中所占用的存储空间的首地址,也称函数入口)。因此也可以口)。因此也可以把函数名赋给一个函数指针把函数名赋给一个函数指针变量变量,使其成为,使其成为指向该函数的指针变量指向该函数的指针变量。函数函数名名则可以看成则可以看成是函数指针常量是函数指针常量。 2022
14、-7-2251 函数指针函数指针与与变量指针变量指针的共同之处是都可以做的共同之处是都可以做间接访问。间接访问。变量指针变量指针指向内存的数据存储区,通指向内存的数据存储区,通过间接存取运算访问目标变量;过间接存取运算访问目标变量;函数指针函数指针指向内指向内存的程序代码存储区,通过间接存取运算存的程序代码存储区,通过间接存取运算使程序使程序流程转移到指针所指向的函数入口流程转移到指针所指向的函数入口,取出函数的,取出函数的机器指令并执行函数,完成函数的调用。机器指令并执行函数,完成函数的调用。 2022-7-22522022-7-2253 将将作为参数,可在主调函数和被调作为参数,可在主调函
15、数和被调函数之间将第三个函数作为参数传递,实现在被函数之间将第三个函数作为参数传递,实现在被函数中调用不同函数的目的,使被调函数成为通函数中调用不同函数的目的,使被调函数成为通用函数。用函数。 作函数参数时,作函数参数时,一定要定义为一定要定义为指向函数的指针变量,指向函数的指针变量,则可以是函数名或指则可以是函数名或指向函数的指针变量。向函数的指针变量。 Y f(x) (x2,f(x2) 0 x1 x x0 x2 X (x1,f(x1) 图8.21 弦截法求方程的根示意图)1()2()1(2)2(1xfxfxfxxfxx2022-7-2254 选定一个单调变化的区间x1,x2 按公式计算x=(x1*y2-x2*y1)/(y2-y1) y=f(x) y*y1=1e-4) x为方程的根图8.22 弦截法求方程的根N-S图 Y f(x) (x2,f(x2) 0 x1 x x0 x2 X (x1,f(x1) 图8.21 弦截法求方程的根示意图被积函数被积函数通过指向函数的指通过指向函数的指针变量调用函数针变量调用函数2022-7-2255