maino [int a=5, b=10: 读程序-1 int pa=&a, "pb=&b a5 printf(b=%dn”,^pb) b b pa=pl &b printf(*pa=%d, pb=%",, pa, pb) int i p =&i p=100 ●读程序的关键: 指针变量指向哪儿? 所指向的变量里存储的数据是多少? 更改的是指针还是指针所指向的变量?
6 读程序-1 main() {int a=5,b=10; int *pa=&a, *pb=&b; *pb=-1; printf(“b=%d\n” , *pb); pa=pb; printf(“*pa=%d,*pb=%d” ,*pa,*pb); } int i,*p; p=&i; *p=100; •读程序的关键: –指针变量指向哪儿? –所指向的变量里存储的数据是多少? –更改的是指针还是指针所指向的变量? &a &b pa pb 5 10 a b -1
为8若 应在类型相 同的指针变 int i 个指针变量不能 量之间赋值 float * p; 指向与其类型不同 &i; 的变量flot称inti:*p=&i 变量P的基类型 float j, q=&j; p=q. int"p P=100 int *p 必须进行赋值 p=100 才能引用否则int"p p指向了哪呢?5 canf(%p“p) 指针变量只 p=100 存放地址! 对指针变量赋值只能通 过&求得!
7 int i,*p=&i; float j,*q=&j; p=q; int i; float *p; p=&i; int *p; 必须进行赋值 p=100; 才能引用!否则 p指向了哪呢? 一个指针变量不能 指向与其类型不同 的变量!float又称 变量P的基类型 应在类型相 同的指针变 量之间赋值 int *p; scanf(“%p”,&p); *p=100; 指针变量只 存放地址! int *p; *p=100; 对指针变量赋值只能通 过&求得!
指针变量与其它类型变量的对比 共性 在内存中占据一定大小的存储单元 先定义,再使用 指针变量的特殊性 指针变量只能存放地址,而不能存放数据 必须初始化后才能使用,否则指向不确定的存储单 元 只能指向同一基类型的变量,否则 warning 可参与的运算:加、减、关系、赋值
8 指针变量与其它类型变量的对比 ▪ 共性 ▪ 在内存中占据一定大小的存储单元 ▪ 先定义,再使用 ▪ 指针变量的特殊性 ▪ 指针变量只能存放地址,而不能存放数据 ▪ 必须初始化后才能使用,否则指向不确定的存储单 元 ▪ 只能指向同一基类型的变量,否则warning. ▪ 可参与的运算:加、减、关系、赋值
为什么引入指针的概念 指针有如下好处: 为函数提供修改变量值的手段 为C的动态内存分配系统提供支持 可以改善某些子程序的效率 为动态数据结构(如例链表、队列、二叉 树等)提供支持
9 为什么引入指针的概念 ▪ 指针有如下好处: ▪ 为函数提供修改变量值的手段 ▪ 为C的动态内存分配系统提供支持 ▪ 可以改善某些子程序的效率 ▪ 为动态数据结构(如例链表、队列、二叉 树等)提供支持
传数值调用 主调函数 实参 十、 形参被调函数N maino void Swap(int x, int y) [ int a, b: int temp a=15 temp= x, b=8 X =y, Swap(a, b): y= temp: rinf C"a=%d,b=‰d",a,b) femp 5 5 9 9 5 b Xy 10
10 主调函数 被调函数 main() { int a, b; a = 15; b = 8; Swap(a, b); printf ("a=%d,b=%d",a,b); } void Swap(int x, int y) { int temp; temp = x; x = y; y = temp; } 5 5 a b 实 参 形 参 9 9 a b x y 传数值调用 x y 5 temp 9 5