C语言--第八章 指针.ppt_第1页
C语言--第八章 指针.ppt_第2页
C语言--第八章 指针.ppt_第3页
C语言--第八章 指针.ppt_第4页
C语言--第八章 指针.ppt_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章 指针 l 主要内容 8.1地址和指针的概念 8.2指针与数组 8.3指针与函数 8.4 main函数中的参数 8.1地址和指针的概念 内存区的每一个字节有一个编号,这就是“地址” 。 如果在程序中定义了一个变量,在对程序进行编译时 ,系统就会给这个变量分配内存单元。 .按变量地址存取变量值的方式称为“直接访问”方式 int i; 取出i 中的内容,只需要找到i的首地址2000,自首地址 起取出两个字节就可以了。 8.1.1地址与指针 2. “间接访问”的方式。即,将变量的地址存放在另 一个变量中。 取出i 中的内容,只需要找到存放i的首地址 2000的变量i_pointer,从中取出i的地址,自首 地址起取出两个字节就可以了。 一个变量的地址称为该变量的“指针”。 例如,地址2000是变量的指针。如果有一个变 量专门用来存放另一变量的地址(即指针),则 它称为“指针变量”。上述的i_pointer就是一个 指针变量。 8.1.2指针和指针变量的定义: 定义指针变量的一般形式为 基类型 *指针变量名; int *i_pointer; 说明: (1)指针变量前面的“*”,表示该变量的类型为指针型变量。 例: float *pointer_1; 指针变量名是pointer_1 ,而不是* pointer_1 。 (2)int *p; 定义指针变量p,基类型为int,则该指针p只能指向int 类型 变量。 (3)定义后未赋值时,其值不确定。 int *p; printf(“%un”,p); 定义了指针变量p,但该指针没有指向其他变量,因此输 出不定值。 8.1.3指针变量的赋值 p= printf(“%u,%un”, 输出指针p的地址和p中存放的内容(i的地址)。 指针变量可以有空值,即该指针变量不指向任何变量。即NULL ,代码值为0,等效于0和0。 int *p1,*p2,*p3; p1=NULL; p2=0; p3=0; 8.1.4 指针变量的引用 格式:*地址(指针) 求一个指针指向的地址的值 例 通过指针变量访问整型变量 #include main ( ) int ,; int*pointer_, *pointer_; ; pointer_; /*把变量的地址赋给 pointer_1 */ pointer_; /*把变量的地址赋给 pointer_ */ printf(%,%,); printf(%,%,*pointer_, *pointer_); 例 8.5 输入和两个整数,按先大后小的顺序输出 和。 #include main() int *1,*2,*,; scanf(,); 1; if() ;/*p1,p2 交换指向*/ printf(=,=,); printf(max=,min=,*1,*2); 运行情况如下: , , , 当输入,时,由于, 将和交换。交换前的情况见图( ),交换后见图()。 8.1.5 指向指针的指针 定义一个指向指针数据的指针变量: 基类型 *指针变量名; int *; 的前面有两个*号。*运算符的结合性是从右到左 ,因此*相当于*(*),显然*是指针变量 的定义形式。如果没有最前面的*,那就是定义了 一个指向整型数据的指针变量。现在它前面又有一 个*号,表示指针变量是指向一个整型指针变量 的。*就是所指向的另一个指针变量。 例 使用指向指针的指针。 #include”stdio.h” main() int *p1,*p2,i=3; p2= p1= printf(“%d,%d,%d”,*p1,*p2); 8.2 数组与指针 指针变量既然可以指向变量,当然也可以指向数 组. 定义一个指向数组元素的指针变量的方法,与以 前介绍的指向变量的指针变量相同。 例如: ; *; 应当注意,如果数组为型,则指针变量的 基类型亦应为型。 8.2.1 指向数组元素的指针 对该指针变量赋值: ; 一维数组的地址是数组首元素的地址,故一维数组名是一个指 向数组首元素的指针常量,是一级指针 或 p=a; 数组名是一个地址常量,它代表数组的首地址 把元素的地址赋给指针变量。也就是使 指向数组的第号元素. 引用一个数组元素,可以用: () 下标法,如形式; () 指针法,格式: *(地址+整型表达式 ) 如*()或*()。其中是数组名,是 指向数组元素的指针变量,其初值。 表示数组元素地址,可以用: () 下标法,如 各元素可表示为:ai,*(a+i),pi,*(p+i)。 注意:数组名是地址常量,a+错误 (2) 两个指针变量可以相减 如果两个指针变量都指向同一个数组中的元素, 则两个指针变量值之差是两个指针之间的元素个 数 。 (3) 两个指针变量比较 若两个指针指向同一个数组的元素,则可以进 行比较。指向前面的元素的指针变量“小于”指 向后面元素的指针变量。 选择法如下: #define N 10 #include “stdio.h” main() int a10,*p,i,j,t; for(p=a,i=0;i*(p+j) t=*(p+i); *(p+i)=*(p+j) ; *(p+j)=t; printf(“排序后的结果为:n”); for(i=0;i0) p=namej; namej=namej+1; namej+1=p; for(i=0;i main() int add(int,int); int ,; scanf(,); add(,); printf(,add ,); int add(int ,int ) return (x+y); 例8.17求两数之和 将 main 函数改写为 #include main() int add(int,int); int (*)(int,int); int ,; add; scanf(,); (*)(,); printf(,add ,); 8.4 指针数组作main函数的形参 指针数组的一个重要应用是作为main函数的形 参。在以往的程序中,main函数的第一行一般写成 以下形式: main()括弧中是空的。 main函数可以有参数,例如: main(int argc,char *argv )。 命令行的一般形式为命令名 参数 参数 参数 argc 是命令行字符串的个数 命令行中的所有字符串的地

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论