版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章指针(变量)6.1变量的地址6.2指针(变量)的概念6.3指针(变量)与函数程序设计基础1第6章指针(变量)教学目标理解地址的概念,变量的地址、函数的地址。理解指针的概念,掌握指针变量的定义及使用。理解指针有关运算的含义,灵活使用指针变量。程序设计基础26.1变量的地址
内存存放了计算机正在运行的程序和程序正在使用的数据。内存的基本单元是字节(Byte)。
为了访问内存单元,CPU给每个内存单元一个编号,该编号称为该内存单元的地址。
变量是程序中可以改变的量,当说明变量时,系统将为其在内存中开辟相应的内存单元。由此确定变量的地址及内存中的表示方式。2000H2001H2002H2003Hinta=0;a的内存单元a的地址&a
如果有一变量p,其内容存放了a的地址&a,通过p也可实现对a的访问,p称为指针变量。00H20Hp0000
6.2指针(变量)的概念…...…...2000200820122010整型变量i10变量i_pointer2002200420062000指针指针变量
变量的内容
变量的地址指针:一个变量的地址指针变量:专门存放变量地址的变量6.2.1定义(声明)指针变量一般形式:
类型标识符
*指针名;合法标识符指针的目标变量的数据类型表示定义指针变量不是‘*’运算符例int
*p1,*p2;float*q;char*name;注意:1、int*p1,*p2;
与int*p1,p2;2、指针变量名是p1,p2,不是*p1,*p23、指针变量只能指向定义时所规定类型的变量4、指针变量定义后,变量值不确定,应用前必须先赋值6.2.2使用指针变量&
与
*
运算符含义含义:取变量的地址单目运算符优先级:2结合性:自右向左含义:取指针所指向的变量单目运算符优先级:2结合性:自右向左i_pointer-----指针变量,它的内容是地址*i_pointer----指针的目标变量,它的内容是数据&i_pointer---指针变量占用内存的地址200010i_pointer*i_pointerii_pointer
=
&i
=
&(*i_pointer)i
=
*i_pointer
=
*(&i)inti=10,j;int*i_pointer;i_pointer=&i;*i_pointer=20;j=*i_pointer;200020i_pointer*i_pointeri例6-1#include<stdio.h>intmain(){int*p,a=10;//定义指针变量p,int型变量a并将10存入a中p=&a;printf("a=%d,*p=%d\n",a,*p);//输出的都是a的值10*p=20;printf("a=%d,*p=%d\n",a,*p);//输出的都是a的值20}程序设计基础76.2.2使用指针变量86.2.3为指针变量赋值例main(){int*a;
*a=32;printf("%d",*a);}危险!指针变量必须先赋值,再使用…...…...200020082012201032指针变量p200220042006随机96.2.3为指针变量赋值一般形式:数据类型*指针名=初始地址值例inti;int*p=&i;变量必须与已说明过的类型应一致例
int*p=&i;
inti;例inti;int*p=&i;int*q=p;用已初始化指针变量作初值不允许直接把一个数赋予指针变量,系统自动将其视为地址6.2.3为指针变量赋值例:inta,*p;//定义指针变量pp=&a;//将变量a的首地址赋给指针变量p*p=2022;//将整数2022存储到指针变量p所指向的空间相同数据类型的指针变量之间也可以赋值。floata,*p,*q;p=&a;q=p;6.2.4二级指针变量一般形式:
类型标识符
**指针名;合法标识符指针的目标变量的数据类型表示定义二级指针变量两个‘*’注意:1、二级指针是指向指针变量的指针变量;2、二级指针存储的是指针变量自身在内存中的地址;6.2.4二级指针变量定义int型指针变量p,并把变量a的地址求出来赋给p定义int型二级指针变量pp,并把指针变量p的地址求出来赋给pp例inta=10;int*p=&a;int**pp=&p;6.2.4二级指针变量#include<stdio.h>intmain(){inta=10;int*array;//定义普通指针变量array
int**p;//定义二级指针变量p
array=&a;//指针变量array指向变量ap=&array;//二级指针变量p指向指针变量arrayprintf("%d\n",p);//输出指针变量array的地址printf("%d\n",*p);//*p是访问指针变量array存储的值,输出a的地址printf("%d\n",**p);//*p是a的地址,**p就是访问a的值,输出10}6.3指针(变量)与函数讨论指针变量与函数的关系,主要有三种应用(1)把指针用作函数的参数。(2)函数的返回值是一个地址。(3)指向函数的指针变量。156.3.1指针变量用作函数形参值传递方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值。地址传递方式方式:函数调用时,为形参分配单元,并将实参变量的地址复制到形参中;实参和形参指向同一存储空间。特点:形参与实参指向相同的内存单元,双向传递6.3.1指针变量用作函数形参16【例6.3】以函数调用方式,实现将两个变量的值交换。voidswap1(inta,intb)//形参是普通变量{
intt;//定义变量t用于中转t=a;//把a的值赋给t暂存a=b;//把b的值赋给a,a原存储值被替换b=t;//把t中存储的a的原值赋给b}voidswap2(int*a,int*b)//形参是指针变量{
intt;t=*a;//a所指向的变量的值赋给t*a=*b;//b所指向的变量的值赋给a所指向的变量*b=t;//t的值赋给b所指向的变量}6.3.1指针变量用作函数形参17#include<stdio.h>intmain(){intm=3,n=5;printf("原始:m=%d,n=%d\n",m,n);swap1(m,n);printf("值传递之后:m=%d,n=%d\n",m,n);swap2(&m,&n);printf("地址传递之后:m=%d,n=%d\n",m,n);}运行结果:原始:m=3,n=5值传递之后:m=3,n=5地址传递之后:m=5,n=36.3.1指针变量用作函数形参6.3.2函数的返回值是地址用返回值方式向调用函数只能返回一个数据。根据返回数据的类型,返回值传递的数据可分为传值和传地址两类。如果函数返回值是某个内存对象的地址,该函数称为返回指针的函数。返回指针的函数定义格式如下:
返回值类型说明符*函数名(形参表){
函数体;}6.3.2函数的返回值是地址例:调用返回指针的函数,求两个整数的最大值#include<stdio.h>int*pmax(int*,int*);//函数声明intmain(){inta,b;int*p;scanf("%d%d",&a,&b);p=pmax(&a,&b);//函数调用printf("maxvalueis:%d",*p);return0;}
int*pmax(int*pa,int*pb){if(*pa>=*pb)returnpa;returnpb;}C语言规定:函数名表示存储该函数代码的存储空间首地址如果把函数名赋予一个指针变量,这样指针变量的值就是函数的程序代码存储区的首地址,这种存储函数地址的指针简称函数指针。C语言允许借用函数指针去调用它指向的函数6.3.3指向函数的指针—借助指针变量调用函数函数指针的定义语句形式如下,返回值类型说明符(*指针变量名)(函数参数表);注意:1、包括“*指针变量名”的圆括号“()”不能省略2、注意其和返回指针的函数定义形式的区别226.3.3指向函数的指针—借助指针变量调用函数236.3.3指向函数的指针—借助指针变量调用函数【例6.5】使用函数指针调用函数的例子。#include<stdio.h>floatmax(float,float,float);/函数声明intmain(){float(*p)(float,float,float);//定义函数指针floata,b,c,big;p=max;//使函数指针p指向max()函数scanf("%f%f%f",&a,&b,&c);big=(*p)(a,b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川省内江市2025-2026学年高二下学期7月期末考试生物试题(文字版含答案)
- 网络工程师网络安全防护效果KPI考核表
- 烹饪技巧家常菜制作手册
- 二年级(上)语文 看图写话训练
- 金融分析师投资策略KPI考核表
- 建筑工程施工组织设计与技术指导
- 补充客户信息完成数据核对回复函8篇范本
- 人力资源招聘成果汇报函(5篇)
- 老年照护中级考试试题库与答案
- 2025年内科主治医师考试试题及答案
- 2026年及未来5年内中国高纯丙烯酸行业投资前景及策略咨询研究报告
- 2026年中央驻山西省政法机关直属事业单位工作人员招聘参考题库及参考答案详解【培优】
- 2026年通信工程施工技师试题及答案
- 2026年贵州省算力科技有限责任公司第一批人员招聘20人笔试备考试题及答案详解
- 2026四川凉山州发展(控股)集团有限责任公司所属企业招聘专业技术人员及管理人员9人笔试参考试题及答案详解
- 2026年中国储备粮管理集团夏季招聘(208人)笔试参考试题及答案详解
- 2025年云南省文山州事业单位选调考试综合能力测试综合训练题库及答案
- 2026年(综合知识、综合应用能力测试)四川省机关事业单位考调、选调工作人员测试题及答案
- 梦幻西游交易账号合同
- 广东省深圳市龙岗区2024-2025学年八年级下学期英语期末真题卷(含答案)
- 汽车充电桩操作人员岗前培训指南 (标准版)
评论
0/150
提交评论