9.1 指针 课件(共16张PPT)-《C语言程序设计》同步教学(西安电子科技大学出版社)

资源下载
  1. 二一教育资源

9.1 指针 课件(共16张PPT)-《C语言程序设计》同步教学(西安电子科技大学出版社)

资源简介

(共16张PPT)
C 语言程序设计
2023
翻转课堂实用教程
9.1 指针
1
2
3
指针的概念
指针变量的定义与使用
指针变量的运算
知识点
指针的案例分析
案例分析
指针相关练习题
练习题
9.1.1 指针知识点
程序在运行时,会为变量分配内存空间。
分配的内存空间会有一个唯一的地址编号,在C语言中又叫做指针。通过指针可以找到该内存单元。
地址取值范围:(32位系统为例)
32位系统的内存条,32个元件,232个组合 =4*230,4GB内存。
内存地址编号从0X00000000到0XFFFFFFFF(十六进制表示)
指针的概念
指针变量保存某个内存空间的地址,并对该内存空间中的值进行操作。
指针变量的定义方式为:
数据类型名* 指针变量名; 或者 数据类型名* 指针变量名 = 地址值;
1.指针变量的定义与使用
指针变量指向的变量的数据类型
指针变量声明符
保存的是某个变量的地址
int *pInt ; //指向int型变量的指针
char *pStr = NULL; //NULL为空指针,stdio.h
int *pInt1,*pInt2;
9.1.1 指针知识点
举例:
double num = 3.14;
double *pDouble = # //定义一个指向double型变量num的指针pDouble
1.指针变量的定义与使用
指针变量pDouble指向num示意图
&num
3.14
pDouble num
&取地址运算符,num的地址
pDouble指向num
9.1.1 指针知识点
指针变量占用的内存大小,仅与地址信息的大小有关,与类型无关。
#include
int main(){
int a = 100;
char c = 'C';
double d = 3.14;
int *pInt = &a;
char *pStr = &c;
double *pDouble = &d;
//分别输出int指针、字符指针、浮点型指针占用的字节数
printf("%d %d %d",sizeof(pInt),sizeof(pStr),sizeof(pDouble));
return 0;
}
1.指针变量的定义与使用
运行结果(64位系统,8个字节)
8 8 8
9.1.1 指针知识点
(1)取内容与取地址
通过变量的地址/指针,同样可以访问到该变量的值。
#include
int main (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);
return 0;
}
2.指针变量的运算
取内容,*p:p指向的变量a的值,等价
取地址,&a:a的地址
运行结果:
*p的值为:3, a的值为:3
*p的值为:6, a的值为:6
&a
3
p a
*p
9.1.1 指针知识点
(2)赋值运算
double num = 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
int main(){
int a = 30,*p = &a,*pI = &a;
double b = 3.14,*pD = &b;
char c = '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指针
else printf("p和pI值不同。");
return 0;
}
9.1.1 指针知识点
运行结果:
sizeof(int) is 4
sizeof(double) is 8
sizeof(char) is 1
初始值 ,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
int main (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);
return 0;
}
*pI的值为:3, a的值为:3
*pI的值为:33, a的值为:33
*pI的值为:34, a的值为:34
*p的值为34, *pI的值为34,a的值为34
a的地址为0X62FE04;p和pI的值为0X62FE04和0X62FE04
*pD的值为:34.618000,num的值为:34.618000
课堂练习题9.1.1 写出执行下面程序后的输出结果
#include
int main(){
int a = 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);
return 0;
}
9.1.3 指针课堂练习题
课堂练习题9.1.2 查找下面程序中的2处错误。
输入a和b,并定义指针p1和p2分别指向a和b,通过取指针值的方式计算a和b的和,并输出和。
#include
int main(){
int a,b;
int *p1,*p2;
p1 = &a,p2=&b;
scanf("%d %d",&a,&p2);
printf("a + b = %d",p1+*p2);
return 0;
}
课堂练习题9.1.3 参照案例9.1.1,自行设计一个对指针操作的程序,并分析程序运行的结果。
9.1.3 指针课堂练习题
9.3.3 指针与数组课堂练习题
课堂练习题9.3.2:写出执行下面程序后的输出结果
#include
int main(){
int i;
int a[10] = {1,2,3,4,5,6,7,8,9,0};
int *p,*p1,*p2;
p1 = &a[2],p2 = a+9;
for(p = p1;p<=p2;p++){
printf("%d ",*p);
}
printf("\n");
for(p = a,i=0;i<6;i++){
printf("%d ",p[i]);
}
return 0;
}
课堂练习题9.3.3:定义函数,采用传递数组指针的方式求解阶乘
谢谢观看
程序设计基础

展开更多......

收起↑

资源预览