内容正文:
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 <stdio.h>
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 <stdio.h>
int main (void){
int *p,a = 3;
p = &a;
//两种获取变量a的方式,*p 和 a等价。
printf("*p的值为:%d, a的值为:%d
",*p,a);
*p = 6; //通过指针p可以修改a的值
printf("*p的值为:%d, a的值为:%d
",*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 指针知识点
代码运行结果说明:第4行代码,&a为a的地址值,整型指针变量p等于整型变量a的地址,意味着:
p指向变量a;
*p就是取p指向的变量a的值,*p就是a,所以输出*p和a时,两者值一样。p和a的关系图如下图9-1-2所示。
*p和a两者完全等价的,对*p操作便是对a操作,第7行将*p修改为6,所以a也变为6。
变量a有两种获取方式,直接通过a来获取,通过取地址内容*p来获取,*p为间接访问,a为直接访问。
(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进行加减法