指针课件《C语言程序设计》同步教学_第1页
指针课件《C语言程序设计》同步教学_第2页
指针课件《C语言程序设计》同步教学_第3页
指针课件《C语言程序设计》同步教学_第4页
指针课件《C语言程序设计》同步教学_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计

2023翻转课堂实用教程9.1指针123指针的概念指针变量的定义与使用指针变量的运算知识点指针的案例分析案例分析指针相关练习题练习题9.1.1指针知识点程序在运行时,会为变量分配内存空间。分配的内存空间会有一个唯一的地址编号,在C语言中又叫做指针。通过指针可以找到该内存单元。地址取值范围:(32位系统为例)32位系统的内存条,32个元件,232个组合=4*230,4GB内存。内存地址编号从0X00000000到0XFFFFFFFF(十六进制表示)指针的概念指针变量保存某个内存空间的地址,并对该内存空间中的值进行操作。指针变量的定义方式为:数据类型名*指针变量名;或者数据类型名*指针变量名=地址值;1.指针变量的定义与使用指针变量指向的变量的数据类型指针变量声明符保存的是某个变量的地址int*pInt;//指向int型变量的指针char*pStr=NULL;//NULL为空指针,stdio.hint*pInt1,*pInt2;9.1.1指针知识点举例:doublenum=3.14;double*pDouble=#//定义一个指向double型变量num的指针pDouble1.指针变量的定义与使用指针变量pDouble指向num示意图&num3.14pDoublenum&取地址运算符,num的地址pDouble指向num9.1.1指针知识点指针变量占用的内存大小,仅与地址信息的大小有关,与类型无关。#include<stdio.h>intmain(){inta=100;charc='C';doubled=3.14;int*pInt=&a;char*pStr=&c;double*pDouble=&d;//分别输出int指针、字符指针、浮点型指针占用的字节数printf("%d%d%d",sizeof(pInt),sizeof(pStr),sizeof(pDouble));return0;}1.指针变量的定义与使用运行结果(64位系统,8个字节)8889.1.1指针知识点(1)取内容与取地址通过变量的地址/指针,同样可以访问到该变量的值。#include<stdio.h>intmain(void){ int*p,a=3; p=&a;

//两种获取变量a的方式,*p和a等价。 printf("*p的值为:%d,a的值为:%d\n",*p,a); *p=6;//通过指针p可以修改a的值 printf("*p的值为:%d,a的值为:%d\n",*p,a); return0;}2.指针变量的运算取内容,*p:p指向的变量a的值,等价取地址,&a:a的地址运行结果:*p的值为:3,a的值为:3*p的值为:6,a的值为:6&a3

pa*p9.1.1指针知识点(2)赋值运算doublenum=3.14,value=0.618;double*pDouble1=&num,pDouble2;//(a)pDouble1=&value;//(b)修改pDouble1的值,让其指向value变量pDouble2=pDouble1;//(c)2.指针变量的运算(a)(b)(c)9.1.1指针知识点(3)加法、减法和比较运算指针变量还可以进行加法、减法和比较运算,一般当指针变量指向数组中的元素时,才有实际的含义。2.指针变量的运算9.1.1指针知识点指针变量只能与整数常量i进行加减法运算,加或减同类型数据长度的i倍,指针往后或往前移动i个同类型的数据。指针pI的加减运算图#include<stdio.h>intmain(){

inta=30,*p=&a,*pI=&a;

doubleb=3.14,*pD=&b;

charc='C',*pC=&c;

//前3个输出语句,输出各个类型占用的字节数

printf("sizeof(int)is%d\n",sizeof(int));

printf("sizeof(double)is%d\n",sizeof(double));

printf("sizeof(char)is%d\n",sizeof(char));

printf("初始值,pI:%#X,pD:%#X,pC:%#X\n",pI,pD,pC);//第4个输出,先输出各个指针的最初值

pI--;pD=pD-1;pC--;//第5个输出,输出-1后的值

printf("地址-1后,pI:%#X,pD:%#X,pC:%#X\n",pI,pD,pC);

pI+=2;pD+=2;pC+=2;//第6、7个输出

printf("地址+2后,pI:%#X,pD:%#X,pC:%#X\n",pI,pD,pC);

printf("*pI:%d,*pD:%f,*pC:%c\n",*pI,*pD,*pC);

if(p==pI)printf("p和pI值相同,指向同一变量。");//第8个输出,比较p和pI指针

elseprintf("p和pI值不同。");

return0;}9.1.1指针知识点运行结果:sizeof(int)is4sizeof(double)is8sizeof(char)is1初始值,pI:0X62FE04,pD:0X62FDF8,pC:0X62FDF7地址-1后,pI:0X62FE00,pD:0X62FDF0,pC:0X62FDF6地址+2后,pI:0X62FE08,pD:0X62FE00,pC:0X62FDF8*pI:6487544,*pD:0.000000,*pC:p和pI值不同。(3)加法、减法和比较运算%#X是输出以0X开头的十六进制地址。9.1.2指针案例分析案例9.1.1指针变量运算案例分析#include<stdio.h>intmain(void){ int*p,*pI,a=3; double*pD,num=0.618; pI=&a;//p指向a printf("*pI的值为:%d,a的值为:%d\n\n",*pI,a);

//修改a变量的值,*p的值也跟着改变 a=33; printf("*pI的值为:%d,a的值为:%d\n\n",*pI,a);

//修改*p变量的值,a的值也跟着改变 (*pI)++; printf("*pI的值为:%d,a的值为:%d\n\n",*pI,a); //同类型的指针可以相互赋值,两者指向同一个变量a p=pI; printf("*p的值为%d,*pI的值为%d,a的值为%d\n",*p,*pI,a); //以十六进制形式输出p和pI的值,均为a的地址 printf("a的地址为%#0X;",&a); printf("p和pI的值为%#0X和%#0X\n\n",p,pI);

pD=# //*pD就是num的值0.618,*p就是a的值34 *pD=*pD+*p; //执行完上面代码后,*pD和num的值均变为了34.618 printf("*pD的值为:%f,num的值为:%f",*pD,num);return0;}*pI的值为:3,a的值为:3*pI的值为:33,a的值为:33*pI的值为:34,a的值为:34

*p的值为34,*pI的值为34,a的值为34a的地址为0X62FE04;p和pI的值为0X62FE04和0X62FE04

*pD的值为:34.618000,num的值为:34.618000课堂练习题9.1.1写出执行下面程序后的输出结果#include<stdio.h>intmain(){ inta=2,b=3; int*p1=&a,*p2=&b; printf("p1指向的值为:%d,p2指向的值为%d\n",*p1,*p2); p2=p1; *p2=b; printf("p1指向的值为:%d,a的值为%d",*p1,a); return0;}9.1.3指针课堂练习题课堂练习题9.1.2查找下面程序中的2处错误。输入a和b,并定义指针p1和p2分别指向a和b,通过取指针值的方式计算a和b的和,并输出和。#include<stdio.h>intmain(){ inta,b; int*p1,*p2; p1=&a,p2=&b; scanf("%d%d",&a,&p2); printf("a+b=%d",p1+*p2); return0;}课堂练习题9.1.3参照案例9.1.1,自行设计一个对指针操作的程序,并分析程序运行的结果。9.1.3指针课堂练习题9.3.3指针与数组课堂练习题课堂练习题9.3.2:写出执行下面程序后的输出结果#include<stdio.h>intmain(){ inti; inta[10]=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论