- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
6.1.1 指针 在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,这在基本数据类型中已有详细的介绍。为了正确地访问这些内存单元,必须为每个内存单元编号,根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址,通常也把这个地址称为指针。 指针是一种用于存储“另外一个变量的地址”的变量。 说明: ① 指针是一个变量类型,只是它的值是某个变量的地址。 ② 这个地址不仅可以是变量的地址,也可以是其他数据结构的地址。 ③ 指针虽然实际上也是一个地址,但它却是一个数据结构(如数组)的首地址,它是指向一个数据结构的,因而概念更为清楚,表示更为明确。 6.1.2 指针的定义及初始化 和一般变量一样,对指针变量的类型说明也包括三个方面的内容:指针类型说明、指针变量名和变量值(指针)所指向的变量的数据类型。 1. 指针变量的声明 指针变量的一般形式为: 类型说明符 *变量名; 其中,*?表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。 2.指针变量的初始化 指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机。另外,指针变量的赋值只能赋予地址,绝不能赋予任何其他数据,否则会引起错误。 C语言中提供了地址运算符来表示变量的地址。其一般形式为: 变量名; 如“a”表示变量a的地址,b表示变量b的地址。特别要注意的是:变量本身必须预先说明。 设有指向整型变量的指针变量为p,如要把整型变量a 的地址赋予p可以有以下两种方式: 方式1: int a; int *p=a; 方式2: int a; int *p; p=a; 注意:把一个数赋予指针变量是错误的,如int *p;p=1000;是错误的。被赋值的指针变量前不能再加“*”说明符,如写为?*p=a也是错误的。 如果将一个指针初始化为NULL,表示该指针并不指向任何地址。 6.1.3 指针运算符 指针有两种运算符:一是取变量地址的操作运算符“”;另一个是间接访问操作运算符“*”。 “”运算符是一元运算符,它返回操作数的内存地址,可以赋给类型合适的指针。在介绍scanf函数及指针变量赋值时,我们已经了解并使用了“”运算符。 “*”运算符也是一个一元运算符,与“”运算符相反,用来表示指针变量所指的变量,用于返回指针指向的内存变量地址中存储的值。在“*”运算符之后跟的变量必须是指针变量。需要注意的是,指针运算符“*”和指针变量说明中的指针说明符“*”不是一回事。在指针变量说明中,“*”是类型说明符,表示其后的变量是指针类型。而表达式中出现的“*”则是一个运算符,用以表示指针变量所指的变量。 两个运算符与其他一元运算符优先级相同,自右向左结合。 scanf(“%d”,num2); pnum1=num1; pnum2=num2; printf( “\n交换前的两个数的位置是:”);printf(“\n第一个数=%d,第二个数=%d\n”, *pnum1,*pnum2); printf(“\n交换两个数,结果为:\n”); temp=*pnum1; *pnum1=*pnum2; *pnum2=temp; printf(“\n第一个数=%d,第二个数 =%d\n”,*pnum1,*pnum2); } 数据交换的程序实现总是类似的,需要一个中间变量。本例中,当给第一个数num1赋值20,给第二个数num2赋值40时,程序的运行结果如图6-2所示。【例6-3】 用指针求出三个数中最大的。要求从键盘上输入三个整数,输出此三个数中的最大数。 程序清单如下: #includestdio.h void main() { int num1,num2,num3,max; int *pnum1,*pnum2,*pnum3; printf(请输入三个整数:); scanf(%d%d%d,num1,num2,num3); pnum1=num1; pnum2=num2; (3) 把一个指针变量的值赋予指向相同类型变量的另一个指针变量。如: int a,*pa=a,*pb; pb=pa; 把a的地址先赋予指针变量pa,由于pa、pb均为指向整型变量的指针变量,因此可以相互赋值,从而把a的地址赋予指针变量pb。 (4) 把数组的首地址赋予指向数组的指针变
您可能关注的文档
最近下载
- [电信行业]移动通信技术移动信道中的电波传播及干扰.pptx VIP
- (课堂教学课件4)七颗钻石.ppt VIP
- Unit 1 长难句分析讲义--高中英语人教版(2019)选择性必修第一册.docx VIP
- 高等教育心理学知识点-.docx VIP
- 2025及以后5年中国碳纤维行业市场运营格局及前景战略分析报告.docx
- 常见微生物与相关疾病.ppt VIP
- 人民医院皮肤性病科临床技术操作规范2023版.pdf VIP
- 三年级下册语文课件-第18课 七颗钻石第一课时|人教新课标 (共20张PPT).pptx VIP
- 2023年绵阳中学自主招生数学试题.doc VIP
- 二下数学混合运算看图列综合算式专项题型练习(含答案12页).pdf VIP
文档评论(0)