网站大量收购闲置独家精品文档,联系QQ:2885784924

C语言中指针用法解析.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言中指针用法解析   【摘要】 指针是c语言教学中比较难理解的一块,文章根据本人多年教学经验,从c语言指针的概念出发,针对指针在教学中的几个重要应用进行了探讨。   【关键词】 c语言 指针 变量 数组   一、引言   指针是c语言的特色之一,也是学生学习c语言程序设计时的一个难点,灵活掌握指针的用法,正确而灵活地运用它可以有效地表示复杂的数据结构,可以动态地分配内存,可以直接处理内存地址等。可以使复杂的程序变得简洁紧凑。   但是在实际教学中发现大部分学生对指针的理解和应用感到困惑,特别是什么时候用什么类型的指针变量。他们在编程过程中是能不用就不用,针对这种情况,本文对指针应用中的一些问题进行了梳理,以便于学生掌握指针的应用。   二、基本概念辨析   如果在使用中定义了一个变量,在编译时系统就会给这个变量分配内存单元。   例如:int x=5,y=9; (如图所示)   变量名 x y   内存单元 … 3 4 …   单元地址 1000 1002   变量名是指数据对象的名称,例如x,y等为整形变量名,变量值是指数据对象的值,例如3,4即为x,y的值,指针即数据对象的内存地址,例如地址为 1000 的单元中存放的是变量x的值。   指针变量是一种专门存放数据对象的内存地址的变量。如何帮助学生去理解二者呢,我们就可以形象化地打个比方,假设卫生信息管理2班在门牌号为508的教室,如果把508教室这个门牌号比做内存地址,那么信管2班的学生就是508教室这个内存地址所存储的值。   2.1指针变量的定义   一般格式为:类型说明符 *指针变量名1,*指针变量名2,…;例如 int *p,*q;   对指针变量的类型说明包括三个内容   1、类型说明符:即指针变量的值所指向的数据类型值,前例中的int即为指针变量所指向的数据类型;   2、指针类型说明:即定义变量为一个指针变量,其标志是变量名前的*;   3、指针变量名:前例中的p,q即为指针变量名。   2.2指针变量赋初值   由于指针就是地址,因此指针变量中存放的是地址,所以赋值即是将某个地址赋给指针变量,如下所示(p、q为指向整形数据的指针变量,i、j为整形变量,a是存放整形数据的数组)   int *p,*q; int i=3,j=4; int a[5]={0,1,2,3,4} ;   p=i; q=j;(将变量i ,j的地址赋给p,q)   p=a; (将数组 a 的首地址赋给p,相当于p=a[0])   p=a[i]; (将数组 a 中第 i 个元素的地址赋给p)   q=p; (将指针变量p的地址赋给指针变量q)   三、指针的应用   3.1数组中指针的应用   在C语言中,数组与指针是两个非常重要的数据类型,它们之间有着十分密切的关系,它们都适于处理内存中连续存放的一系列数据,数组元素的引用可用指针的描述来实现。   main()   {int *p,a[6]={0,1,2,3,4,5};p=a;   for(i=0;i6;i++) printf( “%d”,*(p+i)); }   从上面的程序中,可以看出 *(p+i)等价于a[i]。   例:有char a[4]=”xy”;char *p;执行了语句p=a;之后,*( p+2)的值应该为’\0’。   数组中的行指针和列指针,例:   int i,j,a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};   *p=a[0];   for(i=0;i3;i++)   { printf(“\n”);   for(j=0,j4;j++)   printf(“\5d”,*(p+i*4+j)); }   一维数组名表示一维数组首地址,是列指针常量;二维数组名表示二维数组首地址,是行指针常量。归纳可得:一维数组名+i=列指针;二维数组名+i=行指针。行指针与列指针是不同类型的指针,但它们存放的地址可能相同,而所表示的含义却不同。   例中a和a[0]指向同一个位置,即a等于a[0],但a+1不等于a[0]+1。因为a+1中的1表示数组中的一行,而a[0]+1中的1表示数组中的一个元素。假设a和a[0]的地址为2000, 可推算出a+1的地址为2008,而a[0]+1的地址则为2002。   行指针和列指针可以相互转换。将行指针降级即转变为列指针,降级的方法有指针法和下标法,即利用指针运算符*或下标运算符[]都可以使一个指针降级。例如a为行指针,a* 和a[0]则表示列指针;反之,将列指针升级,即前面加地扯运算符就转换为行指针,例如*a 和a[0]表示列指针,*a和a[0]则表示行指

文档评论(0)

sis_lxf + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档