- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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]则表示行指
您可能关注的文档
最近下载
- 2024年上海杉达学院单招职业技能测试题库【word】.docx VIP
- 健康心理学课件.pptx VIP
- WDGL_VI_X线路录波装置说明书.pdf
- 培训课件--付国兵脏腑推拿现状及研究进展.ppt
- 广东省佛山市南海区2022届九年级模拟考试化学试卷.docx VIP
- 2024年中考英语高频词首字母默写与短语默写表及答案.pdf VIP
- 北京市海淀区2024-2025学年四年级上学期期末考试数学试题.pdf
- 辽宁省沈阳市三年(2021-2023)中考语文试卷分类汇编:文学类文本阅读(含解析).docx VIP
- (2025春新版本)部编版七年级语文下册全册教案.doc
- 黑布林阅读初一17《丹的村庄游乐会》中文版.docx
文档评论(0)