C语言教程同步课件12讲(第9章).ppt

C语言教程同步课件12讲(第9章).ppt

ID:59140298

大小:308.50 KB

页数:42页

时间:2020-09-25

C语言教程同步课件12讲(第9章).ppt_第1页
C语言教程同步课件12讲(第9章).ppt_第2页
C语言教程同步课件12讲(第9章).ppt_第3页
C语言教程同步课件12讲(第9章).ppt_第4页
C语言教程同步课件12讲(第9章).ppt_第5页
资源描述:

《C语言教程同步课件12讲(第9章).ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第十二讲指针第十二讲指针指针的概念指针变量的定义和初始化指针运算符指针作为函数参数指针与数组指针与字符串程序设计举例C语言程序设计2简介指针功能强大,不易掌握。用来模拟引用传递。与数组和字符串关系密切。可以创建和操作动态的数据结构:链表队列栈树指针3指针的概念内存单元地址称为指针。对内存单元的访问有直接和间接访问两种方式。C语言允许直接通过地址来处理数据。指针intx;x=23;内存单元的地址一个无符号的整数,就是指向变量的指针。变量名其实就是内存单元的符号化名称。内存单元的内容就是变量的值。FF00x23直接引用Directreference直接根据变量名存取变量的值。4内存对象的

2、地址变量的地址用取地址运算符(&)获得变量在内存中的地址。数组的地址即第一个元素的地址,用数组名表示。函数的地址用函数名表示。指针intvar;scanf(“%d”,&var);vararrayfunctionintarray[3];intfunction(intx);5指针变量指针变量就是保存内存地址的变量。指针intx=23;int*x_pointer;x_pointer=&x;FF00x23FFF0x_pointerFF00指针变量保存变量的地址。变量x_pointer的值是变量x的地址(指针)。目前,指针x_pointer指向变量x。间接引用Indirectreference

3、将变量的地址存放在另一个内存单元中,当要对变量进行存取时先读取另一个内存单元的值,得到要存取变量的地址,再对该变量进行访问。6指针变量指针变量的声明<类型说明符>*<指针变量名>;*表示x_pointer是一个指针变量x_pointer是int*类型的指针,读作:指向int型数据的指针指向整型对象的指针指针可以声明为指向任何数据类型的对象声明多个指针时,每个变量前都必须有*指针int*x_pointer;int*x_pointer,*y_pointer;char*charPtr;注意所有指针变量保存的数据的类型是相同的,即一个内存单元的地址,但是,它们指向的数据的类型可以不同。7指针

4、变量指针变量的初始化在声明语句中为指针变量指定初值。指针变量可以被初始化为0,NULL或一个地址量。0和NULL是等价的(用NULL更好)NULL是在(和几个其他头文件)中定义的符号常量指针intx,*p=&x;intx,*p=NULL;空指针:不指向任何对象注意:任何指针在使用之前要进行定义并初始化,未经初始化的指针变量禁止使用。8取地址运算符取地址运算符:&返回变量在内存中的地址。&只能用于一个具体的变量或数组元素而不能是表达式或常量。指针inti,*ptr1;charch,*ptr2;ptr1=&i;/*将变量i的地址赋给指针变量ptr1*/ptr2=&ch;

5、/*将变量ch的地址赋给指针变量ptr2*/下列运算是非法的:ptr1=&68;ptr1=&(i+1);因为&只能用于变量而不能用于常量或表达式。9指针运算符指针运算符:*能间接地存取指针所指向的变量的值。指针ptr1=&i;*ptr1=100;/*把100存入ptr1所指的地址(&i)中*/等同于i=100;又如:ptr2=&ch;*ptr2+=32;/*把ptr2所指向的地址(&ch)中的值加32*/相当于:ch+=32;ch=*ptr1;相当于:ch=i;10案例分析:指针运算符指针运算符指针#includevoidmain(){inta=50,*p;p=&a

6、;printf(“*p=%d”,*p);*p=100;printf(“a=%d”,a);}运行结果为:*p=50a=100*和&是互反的&取得一个东西的地址*得到一个地址里放的东西11指针作为函数的参数指针作为函数的参数用来模拟引用传递。用指针变量作为函数的形式参数。调用函数时,用&运算符把实际参数的地址传递给函数。在被调用函数中,用*运算符间接引用实际参数。指针intmyFunc(int*ptr);myFunc(&var);intmyFunc(int*ptr){*ptr=…}12案例分析:指针参数问题:交换两个变量的值。哪一种实现是正确的?指针voidswap(intx,i

7、nty){inttmp;tmp=x;x=y;y=tmp;printf(“x=%d,y=%d”,x,y);}voidmain(){inta=4,b=6;swap(a,b);printf("a=%d,b=%d",a,b);}voidswap(int*x,int*y){inttmp;tmp=*x;*x=*y;*y=tmp;printf(“*x=%d,*y=%d”,*x,*y);}voidmain(){inta=4,b=6;swap(&a,&b);prin

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。