C语言第12讲--特殊数据类型之指针修改.ppt

第十二讲 特殊数据类型 ——指针 变量的地址和指针变量 内存里每个字节都有一个编号,相当于房间都有门牌号。 变量的地址:每个变量都占据了1个或1个以上的字节,分配给该变量的第1个字节的地址即为该变量的地址,也称为该变量的指针。 指针变量:是一种特殊的变量,它存放的内容是另外一个变量的地址。 变量的地址和指针变量 指针变量的定义和赋值 定义的一般格式: 类型名 * 指针变量名; 如:int *p1,*p2; float *p2; 注意:同时定义多个指针变量,勿写成: 类型名 * 指针变量名1,指针变量名2,指针变量名n; 如 int *p1,p2;这样只是定义了p1为指针变量,而p2为整型变量。 另外 * 不属于变量名的组成部分,而只是说明该变量是指针变量。 指针变量的赋值操作: void main() { int *p1,*p2; int x; p1=x; p2=p1; } 取地址运算符和指针运算符 : 取地址运算符 * : 指针运算符(或称“间接访问”运算符) 例如:a 获取变量a的地址 *p 获取对指针变量p所指向的存储单元的引用。运算时实际上有两个步骤:1.读取变量p内存放的地址 ,2.获取该地址所对应的变量的引用。 引用指的是既可以得到该存储单元的值,也能对其值进行改变。 例10.1 通过指针变量访问整型变量 main() { int a,b; int *p1,*p2; a=100;b=10; p1=a;p2=b; printf(“%d,%d\n”,a,b); printf(“%d,%d\n”,*p1,*p2); } 课堂练习 写一个函数,实现交换两个数的值。 指针变量作为函数参数 作用:将一个变量的地址传送到另一个函数中。 应用:使被调用函数能够改变调用它的函数内定义的变量的值。 示例:交换两个数的值 swap(int *p1,int *p2) { int temp; temp=*p1; *p1=*p2; *p2=temp; } main() { int a,b; int *p1,*p2; scanf(“%d%d”,a,b); p1= a;p2=b; printf(“a=%d,b=%d”,a,b); swap(p1,p2); printf(“a=%d,b=%d”,a,b); } 指针变量的加减运算 指针变量与指针变量的加减运算 “+” 运算:不合法。 “-” 运算:合法,所得到的值为两个地址之间的偏移量。 10.3 数组与指针 一维数组与指针 二维数组与指针 一维数组的指针 一维数组的指针(地址):数组的起始地址,用数组名表示 一维数组元素的指针1 (10.3.1) 一维数组元素的指针2 (10.3.1) 一维数组元素的引用2——指针法(10.3.2) 指向数组元素的指针 由于数组内的每个元素相当于一个变量,故指向数组元素的指针变量的定义与前面介绍的方法相同。 例如: int a[10]; int *p1,*p2; p1=a[0]; p2=a[3]; 通过指针引用数组元素 int a[10]; int *p=a[0]; p+i指向数组a的 第i个元素. 通过指针引用数组元素 int a[10]; int *p=a[0];或 int *p=a; 则a[2]、*(a+2)、p[2]、*(p+2) 这四种引用方法等价。都可以得到对数组a下标为2的元素的引用。 数组做为函数参数 本质上,C语言都是将形参数组名作为指针变量来处理的。即以下两个函数定义形式等价。 因此,当调用fun函数时,如 int b[10];fun(b); 是将数组b的首地址传给fun函数的指针a,从而a所指向的存储空间即为数组b所在的空间,所以在fun函数内通过a对其指向的存储单元进行赋值操作会改变数组b的值。 指向一维数组元素的指针变量 有关一维数组及其指针变量在使用时的注意事项 指针变量的值可以改变,即可以使用p++、p+=2、p-=3等, 作用是相对于当前位置前移或后移若干个存储单元。 (2)数组名本身表示数组的首地址,是常量而不是变量,故只能进行加减运算,但不能进行自加自减运算. 一维数组元素输入和输出方法1 —下标法 一维数组元素输入和输出方法2 —地址偏移量法 一维数组元素输入和输出方法3—指针移动法 一维数组元素输入和输出方法3—指针移动法 二维数组的指针(地址) int a[4][10]; a为二维数组的首行的地址,正如在电影院找座位,你要先找到你在哪一行,然后站到该行前面。a+i或a[i]为第i行的地址,术语为二维数组的行地址。

文档评论(0)

1亿VIP精品文档

相关文档