第10章_指针汇.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章_指针汇

第十章 教学重点 1、指针变量的定义、引用 2、指针变量的初始化及运算 3、指向数组的指针变量 4、指向字符串的指针变量 5、指针数组、二级指针 6、指向函数的指针 教学难点 1、指针的运算 2、指向二维数组的指针 3、用指针处理字符串 4、指针数组、二级指针 5、指针的应用 §10.1地址和指针的概念 §10.2 变量的指针和指向变量的指针变量 10.2.1 定义一个指针变量 如果写成以下这样会怎样? void swap1(int *p1,int *p2) { int temp; *temp=*p1; p1=*p2; p2=*temp; } 这个改变不是通过将形参值传回实参来实现的。而是因实参和形参都是指针变量,实参传递给形参后,实参和形参指向共同的变量,在被调用函数中,交换了形参指针所指向的变量值,也即是交换了实参指针所指向变量的值。 能否通过下面的函数实现a和b的互换。 void swap2(int x,int y) {int temp; temp=x; x=y; y=temp; } 如图所示。在函数调用时,a的值传送给x,b的值传送给y。执行完Swap2函数后,x和y的值是互换了,但main函数中的a和b并未互换。也就是说由于“单向传送”的“值传递”方式,形参值的改变无法传给实参。 为了使在函数中改变了的变量值能被main函数所用,不能采取上述的办法,而应该用指针变量作为函数参数,在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化依然保留下来,这样就实现了“通过调用函数使变量的值发生变化,在主调函数(如main函数)中使用这些改变了的值”的目的。 viod swap(int *p1,int *p2) { intp; p=p1;  p1=p2;  p2=p; } void main( ) { int a,b; int pointer-1,*pointer-2;  scanf(%d,%d,a,b); pointer-1=a;pointer-2=b;  if(ab) swap(pointer-1,pointer-2); printf(\n%d,%d\n,*pointer-1,*pointer-2); } 作者的意图是:交换pointer-1和pointer-2的值,使pointer-1指向值大的变量。其设想是: ①先使pointer-1指向a,pointer-2指向b,见下图(a)。 ②调用swap函数,将pointer-1的值传给p1,pointer-2传给p2,见下图(b)。 ③在swap函数中使p1与p2的值交换,见下图(c)。 ④形参p1和p2将地址传回实参pointer-1和pointer-2,使pointer-1指向B,pointer-2指向a,见下图(d)。 ⑤输出*pointer-1和*pointer-2,得到输出“9,5”。 但是这是办不到的,程序实际输出为“5,9”。问题出在第④步。C语言中实参变量和形参变量之间的数据传递是单向的“值传递”方式。指针变量作函数参数也要遵循这一规则。 在main函数中定义指针数组name。它有5个元素,其初值分别是“Follow me”、“BASIC”、“Great Wall”、“FORTRAN”,“Computer Design”的首地址。见图10.41(C)。这些字符串是不等长的(并不是按同一长度定义的)。Sort函数的作用是对字符串排序。Sort函数的形参name也是指针数组名,接受实参传过来的name数组的首地址,因此形参name数组和实参name数组指的是同一数组。用选择法对字符串排序。strcmp是字符串比较函数,name[k]和name[j]是第k个和第j个字符串的起始地址。strcmp(name[k],name[j])的值为:如果name[k]所指的字符串大于name[j]所指的字符串,则此函数值为正值;若相等,则函数值为0;若小于,   则函数值为负值。if语句的作用是将两个串中“小”的那个串的序号(i或j之一)保留在变量k中。当执行完内循环for语句后,从第i个串到第n个串这么多字符串中,第k个串最“小”。若k≠i就表示最小的串不是第i串。故将name[i]和name[k]对换,也就是将指向第i个串的数组元素(是指针型元素)与指向第k个串的数组元素对换。执行完Sort函数后指针数组的情况如图10.42所示。 图10-41 应当这样: char*a,str[10]; a=str; scanf(″%s″,a); (5) 指针变量的值是可以改变的,如: 例10.20 改变指针变量的值 #include stdio.h void main()

文档评论(0)

liwenhua11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档