饶道娟第十章 指针.ppt
文本预览下载声明
第十章 指针 主要内容 地址和指针的概念 变量的指针和指向变量的 指针变量 数组与指针 字符串与指针 指针数组和指向指针的指针 指向函数的指针 返回指针值的函数 地址和指针的概念 内存地址 计算机内的存储部件,程序运行时,相关指令和数据都保存在内存内 速度快,但是掉电即失 可以随机访问 只要指名要访问的内存单元的地址,就可以立即访问到该单元 地址是一个无符号整数 内存中的每个字节都有唯一的一个地址 地址按字节编号,按类型分配空间 访问变量的方式 如何读写内存中的数据? 通过变量的地址访问变量所在的存储单元 C语言访问变量的方式 直接访问 直接按变量地址来存取变量内容的访问方式 间接访问 通过指针变量来间接存取它所指向的变量的访问方式 例:用变量 i_pointer 来存放变量 i 的地址。 如果要得到 i 的值,先访问变量 i_pointer ,得到 i_pointer 的值为2000(该值是变量 i 的地址),再通过地址 2000 找到所指存储单元中的值(i 的值),见图。 变量的指针和指向变量的指针变量 指针的概念 指针也是一种数据类型 指针变量 具有指针类型的变量,专门存放地址数据的变量 变量的指针 变量的地址 指针变量的定义 一般形式为 基类型 *指针变量名; 例:int *p; 定义了一个指针变量p,简称指针p p是变量,int*是类型 p可用于存放地址。尚未初始化,随机值。危险!指向一个不确定的地址。 指针变量初始化 int a,*p=a; *p就像普通的变量一样使用,其值是p指向的内存的内容(在此例中和a等价,但寻址方式不同) p可以动态(任意)地指向不同内存,从而使*p代表不同的变量 int i,*p; p=i; 指针变量的引用 例1. 通过指针变量访问其所指的变量 #include stdio.h void main() { int a,b; int *pointer_1, *pointer_2; a=100;b=10; pointer_1=a; pointer_2=b; printf(%d,%d\n,a,b); printf(%d,%d\n,*pointer_1,*pointer_2); } 对“&”和“*”运算符说明 优先级、结合性: 已知: int a,b; int *pointer_1, *pointer_2; pointer_1=a; pointer_2=b; 则: &* pointer_1 等价于 &a pointer_2 =&* pointer_1 ; pointer_2原来指向b,经过重新赋值后它已不再指向b了,而指向了a。 *&a 等价于 a (*pointer_1)++ 等价于 a++ 例2.输入a和b两个整数,按先大后小的顺序输出a和b。 #include stdio.h void main() { int *p1,*p2,*p,a,b; scanf(%d,%d,a,b); printf(a=%d,b=%d\n\n,a,b); p1=a;p2=b; if(ab) { p=p1;p1=p2;p2=p; } printf(max=%d,min=%d\n,*p1,*p2); } 指针变量作为函数参数 指针既然是数据类型,自然可以做函数的参数和返回值的类型 指针做参数的经典例子: 两数的互换 例:编写函数实现两数的互换 void Swap(int x,int y) { int temp; temp = x; x = y; y = temp; } 简单变量作函数参数 指针变量作函数参数 swap函数的几种错误形式(1/3) 参数单向传递 void Swap(int x, int y) { int temp; temp = x; /*x,y为内部变量*/ x = y; y = temp; } swap函数的几种错误形式(2/3) 参数单向传递 void Swap(int *p1, int *p2) { int *p; p = p1; /*p1,p2为内部变量*/ p1 = p2; p2 = p; } #include stdio.h void main() { int *p1,*p2,*p,a,b; scanf(%d,%d,a,b); printf(a=%d,b=%d\n\n,a,b); p1=a;p2=b; if(ab) { p=p1;p1=p2;p2=p; } printf(max=%d,min=%d\n,*p1,*p2); } #in
显示全部