例3输入 mA数数M列如输出 #includ void swap(int *p1, int *p2) fint t: t=*p1;*p1=*p2;*p2=t;} maino fint a, b, *pointer, * pointer printf("Enter two integers: In") scanf("%d, %d", &a, &b) pointer=&a; pointer=&b: if(a<b) swap(pointer 1, pointer 2); printf("na=%d, b=%d\n", a, b); printf("bigger=%d, smaller=%dIn",*pointer, *pointer2
例3 输入#include <stdio.h> a 和 b 两个整数,按从大到小的顺序输出 void swap(int *p1, int *p2) { int t; t=*p1; *p1=*p2; *p2=t; } main() { int a,b,*pointer1,*pointer2; printf("Enter two integers:\n"); scanf("%d,%d",&a,&b); pointer1=&a; pointer2=&b; if(a<b) swap(pointer1,pointer2); printf("\na=%d, b=%d\n",a,b); printf("bigger=%d, smaller=%d\n",*pointer1,*pointer2); }
数组的指针和指向数组的 指针变量 ●指向数组元素的指针 ●通过指针引用数组元素 ●用数组名作函数的参数 ●指向多维数组的指针和指针变量
数组的指针和指向数组的 指针变量 ⚫ 指向数组元素的指针 ⚫ 通过指针引用数组元素 ⚫ 用数组名作函数的参数 ⚫ 指向多维数组的指针和指针变量
指向数组元素的指针 数组的指针是数组的起始地址,数值元 素的指针是数组元素的地址 指向数组元素的指针变量的定义和赋值 先定义,再赋值 例: int al[5];int*p; p=a; (p-=&ao 2.定义时赋初值 例:inta[5] int p=a; (int*p=&a0];)
指向数组元素的指针 ⚫ 数组的指针是数组的起始地址,数值元 素的指针是数组元素的地址 ⚫ 指向数组元素的指针变量的定义和赋值 1. 先定义,再赋值 例:int a[5]; int *p; p=a;(p=&a[0];) 2. 定义时赋初值 例:int a[5]; int *p=a;(int *p=&a[0];)
通过指针引用数组元素 若p的初值为&a[0],则 1.pi和a都可表示a[订的地址 2.*(p+)和*(a+i)都可表示a[,口实际上是变址 运算符 3.指向数组的指针变量也可以带下标,如:p[i 与*(p+i)等价 数组元素的引用方法有两种(见p212例5) 1.下标法ai 2.指针法*(a+i)或*(p+i
通过指针引用数组元素 ⚫ 若p的初值为&a[0],则: 1. p+i 和 a+i 都可表示a[i]的地址 2. *(p+i)和 *(a+i)都可表示a[i],[]实际上是变址 运算符 3. 指向数组的指针变量也可以带下标,如:p[i] 与*(p+i)等价 ⚫ 数组元素的引用方法有两种(见p212例5) 1. 下标法 a[i] 2. 指针法 *(a+i) 或 *(p+i)
通过指针引用数组元素(续) 使用指针变量要注意的几个问题 1.指针变量的值可以改变,而数组名不 2.要注意指针变量的当前值(例6) 3.指针变量可以进行以下运算: 赋值运算(只能赋予地址值或空值 算术运算p++p+3指针之间的减法 关系运算p=0p=0p<q
通过指针引用数组元素(续) 使用指针变量要注意的几个问题 1. 指针变量的值可以改变,而数组名不行 2. 要注意指针变量的当前值(例6) 3. 指针变量可以进行以下运算: 赋值运算(只能赋予地址值或空值) 算术运算 p++ p+3 指针之间的减法 关系运算 p==0 p!=0 p<q