文档详情

06级C程序设计-第10章.ppt

发布:2018-02-17约2.77万字共84页下载文档
文本预览下载声明
第十章 指针 C程序设计中使用指针可以: 使程序简洁、紧凑、高效 有效地表示复杂的数据结构 动态分配内存 得到多于一个的函数返回值 10.1 指针的概念 变量与地址 与*运算符 含义 直接访问与间接访问 直接访问:按变量地址存取变量值 间接访问:通过存放变量地址的变量去访问变量 10.2 指针变量 指针变量与其所指向的变量之间的关系 指针变量的初始化 一般形式: 数据类型 *指针名=初始地址值; 指针变量作为函数参数——地址传递 特点:共享内存,“双向”传递 对二维数组 int a[3][4],有 a二维数组的首地址,即第0行的首地址 a+i第i行的首地址 a[i] ? *(a+i)第i行第0列的元素地址 a[i]+j ? *(a+i)+j 第i行第j列的元素地址 *(a[i]+j) ? *(*(a+i)+j) ? a[i][j] 二维数组的指针变量 指向二维数组元素的指针变量 指向一维数组的指针变量 定义形式: 数据类型 (*指针名)[一维数组维数]; 例 int (*p)[4]; 二维数组的指针作函数参数 用指向变量的指针变量 用指向一维数组的指针变量 用二维数组名 10.4 指针与字符串 字符串表示形式 用字符数组实现 字符串指针作函数参数 字符指针变量与字符数组 char *cp; 与 char str[20]; str由若干元素组成,每个元素放一个字符;而cp中存放字符串首地址 char str[20]; str=“I love China!”; (?) char *cp; cp=“I love China!”; (?) str是地址常量;cp是地址变量 cp接受键入字符串时,必须先开辟存储空间 字符串与数组关系 字符串用一维字符数组存放 字符数组具有一维数组的所有特点 数组名是指向数组首地址的地址常量 数组元素的引用方法可用指针法和下标法 数组名作函数参数是地址传递等 区别 存储格式:字符串结束标志 赋值方式与初始化 输入输出方式:%s %c 10.5 指针与函数 函数指针:函数在编译时被分配的入口地址,用函数名表示 用函数指针变量作函数参数 8.6 返回指针值的函数 函数定义形式: 类型标识符 *函数名(参数表); 例 int *f(int x, int y) 10.7 指针数组和多级指针 用于处理二维数组或多个字符串 指针数组 定义:数组中的元素为指针变量 定义形式:[存储类型] 数据类型 *数组名[数组长度说明]; 例 int *p[4]; 多级指针 定义: 指向指针的指针 一级指针:指针变量中存放目标变量的地址 命令行参数 命令行:在操作系统状态下,为执行某个程序而键入的一行字符 命令行一般形式:命令名 参数1 参数2………参数n Dank! char name[5][9]={“gain”,“much”,“stronger”, “point”,“bye”}; char *name[5]={“gain”,“much”,“stronger”, “point”,“bye”}; g a i n \0 s t r o n g e r \0 p o i n t \0 m u c h \0 name[0] name[1] name[2] name[3] name[4] b y e \0 g a i n \0 s t r o n g e r \0 p o i n t \0 m u c h \0 b y e \0 二维数组与指针数组区别: 二维数组存储空间固定 字符指针数组相当于可变列长的二维数组 分配内存单元=数组维数*2+各字符串长度 指针数组元素的作用相当于二维数组的行名 但指针数组中元素是指针变量 二维数组的行名是地址常量 main() { int b[2][3],*pb[2]; int i,j; for(i=0;i2;i++) for(j=0;j3;j++) b[i][j]=(i+1)*(j+1); pb[0]=b[0]; pb[1]=b[1]; for(i=0;i2;i++) for(j=0;j3;j++,pb[i]++) printf(b[%d][%d]:%2d\n,i,j,*pb[i]); } 例 用
显示全部
相似文档