TC IDE 第八章指针 本章重点:1、指针的概念; 2、变量的、函数的指针; 跳转到第一页
跳转到第一页 第八章 指 针 TC IDE 本章重点:1、指针的概念; 2、变量的、函数的指针;
TC IDE 第八章指针 第一节变量的地址和指针 内存用户数据区 地址与取地址运算 (1)C程序中每一个变量都要在内存中占有 个可标识的存储区。 2000 (2)存储区的地址是指该存储区域中第一个字 2002 节的地址。 2004 (3)C语言除允许在程序中用名字引用一个变 量之外,还允许在程序中使用该变量的地 址 3010 2000 例: int 1,,k; scanf(%d”,&i); 跳转到第一页
跳转到第一页 第八章 指 针 TC IDE 第一节 变量的地址和指针 1、地址与取地址运算: (1) C程序中每一个变量都要在内存中占有一 个可标识的存储区。 (2)存储区的地址是指该存储区域中第一个字 节的地址。 (3) C语言除允许在程序中用名字引用一个变 量之外,还允许在程序中使用该变量的地 址。 例: int i,j,k; scanf(“%d”,&i); 2000 2002 2004 3010 i j k i_p 3 6 9 2000 : : : 内存用户数据区 : :
TC IDE 第一节变量的地址和指针 2、指针与指针变量 ※直接访问:直接按变量的地址存取变量值 指通过变量名或地址访问程序中一个变量的存储空间。 例:i=3,j=6,k=9;/通过变量i、j、k来访问存储单元。 ※间接访问: 指通过存放地址的单元找到变量的存储空间。 例:变量i,不知道其值及地址,而只知道它的地址放在 3010、3011,因此可通过存放地址的单元找到变量i 的值。 注意:对于间接访问,在c语言中,可定义一种变量专门用 米创 存放其它变量的地址。 1 pointer; i pointer=&i; 跳转到第一页
跳转到第一页 TC IDE 第一节 变量的地址和指针 2、指针与指针变量: 简言之,指针就是地址。 (1)内存的访问方式 ※ 直接访问:直接按变量的地址存取变量值 指通过变量名或地址访问程序中一个变量的存储空间。 例: i=3, j=6, k=9; /* 通过变量i、j、k 来访问存储单元。*/ ※ 间接访问: 指通过存放地址的单元找到变量的存储空间。 例: 变量 i,不知道其值及地址,而只知道它的地址放在 3010、3011中,因此可通过存放地址的单元找到变量i 的值。 注意: 对于间接访问,在c语言中,可定义一种变量专门用 来 存放其它变量的地址。 例: i_pointer; i_pointer=&i;
TC IDE 第一节变量的地址和指针 (2)指针与指针变量的概念: ※一个变量的地址称为该变量的“指针”。 ※存放地址的变量叫“指针变量”。 指针变量存放地址。 (3)变量的指针与指向变量的指针变量区别: ※变量的指针:即该变量地址。 ※指向变量的指针变量:存放着变量地址的变量。 跳转到第一页
跳转到第一页 TC IDE 第一节 变量的地址和指针 (2)指针与指针变量的概念: ※ 一个变量的地址称为该变量的“指针”。 ※ 存放地址的变量叫“指针变量”。 指针变量存放地址。 (3)变量的指针与指向变量的指针变量区别: ※ 变量的指针:即该变量地址。 ※ 指向变量的指针变量:存放着变量地址的变量
TC IDE 第二节指针变量的定义和基类型 指针的类型: 是指它所指向的变量的类型。 例:指向整型变量的指针,其类型便为int 2、指针变量的定义 语法格式:类型标识符变量名; 例:int*p1 charpy float "p3; 注意:(1)*是说明符,意为该变量是指针型变量。 (2)指针变量是具有确定的指向的数据类型 (3)指针变量必须区分基类型 跳转到第一页
跳转到第一页 TC IDE 第二节 指针变量的定义和基类型 1、指针的类型: 是指它所指向的变量的类型。 例: 指向整型变量的指针,其类型便为int。 2、指针变量的定义: 语法格式: 类型标识符 *变量名; 例: int *p1; char *p2; float *p3; 注意: (1) * 是说明符,意为该变量是指针型变量。 (2) 指针变量是具有确定的指向的数据类型。 (3) 指针变量必须区分基类型
TC IDE 第三节给指针变量赋值 给指针变量赋地址值: PI (1)通过求地址运算&获得地址值200 3 例 Int x p1, p2, i 1=&i /一般不直接赋数值。*/200 p1的意义为p1所指向的变量i, p1与代表同一存储空间,i=3;则p1也为3 (2)通过指针变量获得地址值 2=p1 2、给指针变量赋“空”值 pl=NULL 说明: (1)NULL是 stdio.h中的预定义符,用到NULL需加命 令:# include“ stdio. h” (2)NULL的值为0,即“空”。 (3)p1=NULL;等价于pl=“(0’;或p1=0; 跳转到第一页
跳转到第一页 TC IDE 第三节 给指针变量赋值 1、给指针变量赋地址值: (1)通过求地址运算&获得地址值 例:int *p1, *p2,i; p1=&i; /* 一般不直接赋数值。*/ *p1的意义为p1所指向的变量i, *p1与i代表同一存储空间,i=3;则*p1也为3。 (2)通过指针变量获得地址值 p2=p1; 2、给指针变量赋“空”值 p1=NULL; 说明: (1)NULL是stdio.h中的预定义符,用到NULL需 加命 令:#include “stdio.h” (2)NULL的值为0,即“空”。 (3)p1=NULL ; 等价于 p1=‘\0’; 或 p1=0; 2000 3 P1 *p1 i 2000
TC IDE 第四节对指针变量的操作 1、通过指针来引用一个存储单元 例:inti=3,j,*p;/此行的“*”与下面的不同* & i=*p+2 “p=&i”的作用是使指针变量p指向变量i 注意:(1)p是地址变量,而p是非地址变量。 (2)“*”:为指针运算符(指向运算符、间接运算符) 为单目运算符。 (p表示p所指向的变量) (3)“&”:为取地址运算符,为单目运算符。 (&x表示x变量的地址) 跳转到第一页
跳转到第一页 TC IDE 第四节 对指针变量的操作 1、通过指针来引用一个存储单元 例 : int i =3, j , *p; /*此行的“*”与下面的不同*/ p=&i; j=*p+2; “p=&i”的作用是使指针变量p指向变量i 。 注意:(1)p是地址变量,而*p 是非地址变量。 (2)“*”:为指针运算符(指向运算符、间接运算符) 为单目运算符。 (*p表示p所指向的变量) (3)“&”:为取地址运算符,为单目运算符。 (&x表示x变量的地址)
TC IDE 第四节对指针变量的操作 例:inti,j,*p /此行的“*”与下面的不同 p=&i; 3 p+2; “p=&i”的作用是使指针变量p指向变量i。 定义后 p&i后 p=3后 j*p+2后 1000 1000 1000 1000 1002 1002 1002 1002 1004 10041000 10041000 p1004 1000 跳转到第一页
跳转到第一页 TC IDE 第四节 对指针变量的操作 例 : int i , j , *p; /*此行的“*”与下面的不同*/ p=&i; *p=3; j=*p+2; “p=&i”的作用是使指针变量p指向变量i 。 定义后 p=&i后 *p=3后 i j p : : : : 1000 1002 1004 i j p 1000 1002 1004 i j p 1000 1002 1004 i j p 1000 3 1000 1000 1002 1004 j=*p+2后 3 5 1000
TC IDE 第四节对指针变量的操作 关于运算符&和*的几点说明: (1)结合性:自右向左 &*p1相当于&(p1)==&(a)==&a=p1 &a 相当于*(&a)=a (2)优先级:高于算术运算符,低于正负号运算符 2、移动指针(指针与整数相加、减): ※表示指针在内存空间的上下移动。 ※移动是以其类型长度为单位的。 请看p9页例子。 3、指针比较: B: if(p<g)printf("p points to lower memory than q n") f(p==403) printf((“ p points to Nul.n”); 跳转到第一页
跳转到第一页 TC IDE 第四节 对指针变量的操作 关于运算符&和 * 的几点说明: (1)结合性:自右向左 &*p1 相当于 &(*p1) ==&(a)==&a==p1 *&a 相当于 *(&a)==a (2)优先级:高于算术运算符,低于正负号运算符。 2、移动指针(指针与整数相加、减): ※ 表示指针在内存空间的上下移动。 ※ 移动是以其类型长度为单位的。 请看p99页例子。 3、指针比较: 例:if(p<q)printf(“p points to lower memory than q.\n”); if(p==‘\0’)printf(“p points to Null.\n”);
TC IDE 第五节函数之间地址值的传递 、指针作为函数参数: 1、用指针(地址)作函数参数,可以实现“通过被调 用 的函数改变主调函数中变量的值”的目的。 2、使用指针作为函数参数可以在调用一个函数时得到 多个由被调函数改变了的值。 例:p101的8.3两个变量交换 跳转到第一页
跳转到第一页 第五节 函数之间地址值的传递 一、指针作为函数参数: 1、用指针(地址)作函数参数,可以实现“通过被调 用 的函数改变主调函数中变量的值”的目的。 2、使用指针作为函数参数可以在调用一个函数时得到 多个由被调函数改变了的值。 例:p101的8.3 两个变量交换 TC IDE