《高级程序设计C语言 赵红11级C语言课堂上机课件 第7讲指针》由会员分享,可在线阅读,更多相关《高级程序设计C语言 赵红11级C语言课堂上机课件 第7讲指针(39页珍藏版)》请在金锄头文库上搜索。
1、 复习 2020 4 23 1 有以下程序main intm n p scanf m dn dp d 若想从键盘上输入数据 使变量m中的值为123 n中的值为456 p中的值为789 则正确的输入是 2020 4 23 2 A m 123n 456p 789B m 123n 456p 789C m 123 n 456 p 789D 123456789 2020 4 23 3 原样显示字符串 4howmanywordsarethereinthisstring howareyou goodluck happybirthdaytoyou 2020 4 23 4 include includeintm
2、ain charch 100 intn len i count scanf d c 2020 4 23 5 原样显示字符串 howmanywordsarethereinthisstring howareyou goodluck happybirthdaytoyou 2020 4 23 6 7 第7讲指针 C语言程序设计 赵红 2020 4 23 8 include defineM5 defineN7intfun1 intx intn intmain inta M 3 4 5 2 6 intb N 1 printf d n fun1 a M printf d n fun1 b N return0
3、 intfun1 intx intn inti intmax x 0 for i 1 i n i if max x i max x i returnmax 如果用一个函数找出最大值及最小值 注意一个函数只有一个返回值 2020 4 23 9 2020 4 23 10 复习 voidswap intx inty intz z x x y y z printf nx d y d x y main inta 10 b 20 swap a b printf na d b d n a b 解决上面两个问题需要用到指针 非常重要 2020 4 23 11 2020 4 23 12 1地址和指针的概念 ma
4、in floatx inty 变量的两个物理意义 变量的内容 变量的地址 2020 4 23 13 main inta p 2004 2指针和指针变量 2 2指针变量的定义 2000 指针变量初始化 2020 4 23 14 main inta p 间接存取运算 2004 2指针和指针变量 2 3指针的基本运算 2000 p 5 2020 4 23 15 复习 voidswap intx inty intz z x x y y z printf nx d y d x y main inta 10 b 20 swap a b printf na d b d n a b 2020 4 23 16
5、2指针和指针变量 2 3指针变量作函数参数 例3 输入2个整数 按从小到大顺序输出 voidswap int x1 int x2 intt t x1 x1 x2 x2 t return voidmain inta b scanf d d 2020 4 23 17 复习 写一程序 从键盘接收10个数 然后再显示出来 main inta 10 i for i 0 i 10 i scanf d 2020 4 23 18 接收数据a 5 并输出 用指针完成 2034 能被3整除的数 ProblemDescription找出数组a中能被3整除的数要求用数组完成 Input输入整数N 代表N组数据 接下来
6、的N行中 每行的第一个整数M代表这一行共有M个测试数据 M 100 接下来是这M个数据的数值 Output输出每一组数据中能被3整除的数值 及其所在数组中的位置 注意 按生活中的习惯 下标从1算起 2020 4 23 19 改成二维数组 如果该测试数据中不含有被3整除的数值 则输出 notfound 每一组数据对应一行输出 SampleInput339341241245265SampleOutputa 1 9a 3 12notfound a 1 6 2020 4 23 20 2016 判断字符串是否为回文 ProblemDescription判断一个字符串是否是回文串 所谓回文串是指一个字符串
7、正序与反序是一样的字符串 Input输入数据有多组测试实例 每个测试实例的一行 表示要判断的字符串 Output对于每组输入数据 输出占一行如果字符串 xxx 是回文 输出 xxxisapalindromestring 否则输出 xxxisnotapalindromestring 2020 4 23 21 用指针完成 SampleInputabcbahellowellewSampleOutputabcbaisapalindromestringhelloisnotapalindromestringwellewisapalindromestring 2020 4 23 22 参考代码 includ
8、e includeintmain chara 100 intflag char p q while gets a flag 0 p a q a strlen a 1 for p q p q if p q flag 1 break if flag printf sisnotapalindromestring n a elseprintf sisapalindromestring n a return0 2020 4 23 23 2026 求一个字符串的长度 ProblemDescription编写自定义函数 求一个字符串的有效长度 在main函数中输入字符串 调用函数并输出其长度 Input输入
9、文件首先包含一个整数n 表示测试实例的个数 然后是n段字符串 Output对于每一段字符串 输出字符个数 每段的输出占一行 需要必要的提升 2020 4 23 24 SampleInput3chinahelloworld nicetomeetyou SampleOutputthelengthofstringis5thelengthofstringis12thelengthofstringis17 2020 4 23 25 参考代码 include includeintstrlenzh char s char p s intx 0 while p 0 x p returnx intmain in
10、tn charch 100 scanf d c 2020 4 23 26 2020 4 23 27 复习 是下标运算符 引用数组元素时 根据数组的首地址和下标数 计算出该元素的实际地址 取出该地址的内容进行操作 floatscore 5 如引用score 2 1 计算2000 2 4 2008 2 取出2008的内容 2020 4 23 28 数组名是该数组的指针a是数组的首地址 即a 0 的地址 是一个指针常量 a a 0 a 1 a 1 a 9 a 9 数组元素的下标表示法 a 0 a 1 a i a 9 数组元素的指针表示法 a 0 a 1 a i a 9 3指针与数组 3 1指向数组的
11、指针 1 一维数组的指针 例如 inta 10 p 2020 4 23 29 当p指向a 0 时 用p表示数组元素下标法 p 0 p 1 p i p 9 指针法 p 0 p 1 p i p 9 3指针与数组 3 1指向数组的指针 1 一维数组的指针 指向一维数组元素的指针变量由于数组元素也是一个内存变量 所以此类指针变量的定义和使用与指向变量的指针变量相同 例如 inta 10 p p a 或p a 2020 4 23 30 例5 用数组元素地址 输出数组元素 main inta 10 i p for i 0 i 10 i scanf d a i for i 0 i 10 i printf 4
12、d a i printf n for p a i 0 i 10 i printf 4d p i printf n 3指针与数组 3 1指向数组的指针 1 一维数组的指针 12345678910 12345678910 12345678910 指针p未动 2020 4 23 31 例5 用指针法输出数组元素 main inta 10 i p for p a p a 10 p scanf d p for p a p a 10 p printf d p printf n 3指针与数组 1 一维数组的指针 10 2020 4 23 32 数组名和指向数组的指针变量的区别 指针变量p是变量可以赋值 数组
13、名a是地址常量不能赋值 数组名是地址 指向数组的指针变量存放的也是地址 通过指针变量也可以引用数组元素 p a 0 等效于p a 3指针与数组 3 1指向数组的指针 用指针变量引用数组元素 必须关注其当前值 例如 p p 3 p 1 p 1 等价于a 2 2020 4 23 33 当函数之间需要传递数组时 可以通过传递数组的首地址 即通过指针参数指向域的扩展 完成存取主调函数中数组元素的操作 3指针与函数 2 数组的指针作函数参数 一维数组的指针作函数参数例如被调函数abc的定义形式有以下三种 voidabc intb 10 voidabc intb voidabc int b 在主调函数有如
14、下定义 inta 10 p a 则调用abc函数时可用abc a 或abc p 3 3指针变量作函数参数 2020 4 23 34 例16 通过初始化使指针指向一个字符串 main charstr1 Goodmorning char str2 Goodnight printf s n str1 printf s n str2 4指向字符串的指针变量p251 4指向字符串的指针变量 1 指向字符串的指针变量的定义及初始化 字符串的两种表示方式 字符数组表示方式 字符串存放在一维数组中 引用时用数组名 字符指针变量表示方式 字符指针变量存放字符串的首地址 引用时用指针变量名 Goodmorning
15、 Goodnight 2020 4 23 35 将一个字符串赋给一个字符数组只能使用strcpy函数将字符串常量的首地址赋给指针变量 可使用赋值运算符 例18 通过赋值运算使字符指针变量指向一个字符串 includemain charc 80 str strcpy c Howareyou str Fine thanks printf s n s n c str 4指向字符串的指针变量 4指向字符串的指针变量 2 字符串的赋值运算 Howareyou Fine thanks 2020 4 23 36 例9 利用指针变量输入输出字符串 includemain charc 80 str str c
16、gets str puts str 4指向字符串的指针变量 4指向字符串的指针变量 3 字符串的输入输出 使用字符串输入输出函数gets和puts 在scanf和printf函数中使用 s格式实现 输入字符串时 函数参数 数组名 存有数组名的指针变量 输出字符串时 函数参数 数组名 存有字符串首地址的指针变量 2020 4 23 37 4指针与函数 4 2指针变量作函数参数 2 数组的指针作函数参数 例20 字符串复制函数 voidcopystr char t char s 字符指针变量t和s作形参 while t s 0 main charc 80 p Iamastudent copystr c p 数组名c和字符指针变量p作实参 printf s n c 2020 4 23 38 指针数组定义的一般形式 数据类型标识符 数组名 元素个数 在这个定义中由于 比 的优先级高 所以数组名先与 元素个数 结合 形成数组的定义形式 表示数组中每个元素是指针类型 数据类型标识符 说明指针的目标变量的数据类型 例如 int ip 10 char cp 5 7指针与数组 7指针数组 1 指针数组的