文档详情

饶道娟第十章 指针.ppt

发布:2018-03-09约1.43万字共78页下载文档
文本预览下载声明
第十章 指针 主要内容 地址和指针的概念 变量的指针和指向变量的 指针变量 数组与指针 字符串与指针 指针数组和指向指针的指针 指向函数的指针 返回指针值的函数 地址和指针的概念 内存地址 计算机内的存储部件,程序运行时,相关指令和数据都保存在内存内 速度快,但是掉电即失 可以随机访问 只要指名要访问的内存单元的地址,就可以立即访问到该单元 地址是一个无符号整数 内存中的每个字节都有唯一的一个地址 地址按字节编号,按类型分配空间 访问变量的方式 如何读写内存中的数据? 通过变量的地址访问变量所在的存储单元 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
显示全部
相似文档