C程序设计课件第7章.ppt_第1页
C程序设计课件第7章.ppt_第2页
C程序设计课件第7章.ppt_第3页
C程序设计课件第7章.ppt_第4页
C程序设计课件第7章.ppt_第5页
已阅读5页,还剩107页未读 继续免费阅读

下载本文档

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

文档简介

第七章 指针 n基本概念 n指针运算 n指针与数组 n指针与字符串 n指向指针的指针 n命令行参数 n本章小结 基本概念 n指针是高级程序设计语言中一个重要的概念 n正确灵活运用指针 可有效地表示和使用复杂的数据结构 可动态分配内存空间,节省程序运行空间 ,提高运行效率 n不正确理解和使用指针,指针将是程序中最危险 的成分,由此带来的后果可能是无法估量的。 n数据在内存中的存储和访问方式 每个变量 在计算机内存占用一块存储区 该存储区的地址就是相应变量的 地址 变量可能有值 该存储区保存的内容就是相应变 量的值 5 V 0F000 : 变量地 址 变量名 变量值 变量的存储 区 n例如有变量声明 char c=S; int v=27,u=32; int *p = 则编译程序分别给变量 c 、v 、u 、p 分配存储空间如图所示 B904B900变量p B90232变量u B90027变量v B8FFS变量c 地址 内存变量名 n必须理解清楚: 给变量分配的内存区域 该内存区域的地址 该内存区域保存的内容 以及它们之间的关系 n一个变量v的指针或称指向变量v的指针 就是给它分配的内存区域的地址 或说是给它分配的内存区域的地址首地址 n访问变量 直接访问:直接使用变量v的名字 int v=10; v=v*10; 间接访问:使用指向相应变量的指针 比如访问变量 v 可以用下面方式来实现: *p 算式 (*p)*10 同样得到值100 。它通过指向 v 的 指针变量 p ,采用间接访问的方式实现对变量 v 的访问,取出变量 v 的值参与运算。 地址与指针是同意语。变量的指针就是变量的地 址,存放变量地址(指针)的变量是指针变量 指针类型 n指针类型和基类型 在C中,任何一个类型都伴随着一个指向 本类型变量的指针类型 表现形式 设有类型T,则指向T类型变量的指针类 型用: T * 表示,T称为该指针类型的基类型。 指针变量 n意义 指针变量简称指针 是一种特殊的变量 它里面存储的“值”被解释成为一个变量的地 址,确切的说是计算机内存的一个地址。 n声明指针变量 说明指向T类型变量的指针变量使用形式: T*p , *p , *p ; 其中,每个p都是标识符,是被说明的指针类型的变 量,确切的说是“指向T类型变量的指针变量”。 n指针所指向的类型可以是 基本数据类型 构造型数据类型 指针类型 函数 n经常简称 “指向T类型变量的指针变量v” “v指向T类型” “T类型的指针v” n例如 int *iptr1, *iptr2 ; /* 说明指向int类型变量的指针变 量 iptr1和iptr2 */ char * cptr ; / 说明指向char类型变量的指针 变cptr int x , y ; char ch = a; n指针变量的值是内存地址(宏观上讲是变量的地址 ) n求取不同类型变量或常量地址的表达方式不同: 基本类型变量、数组成员、结构体变量、联 合体变量等,用求地址运算符“ char * cptr; int x , y ; char ch = a; 在此基础上,有操作: iptr1 = cptr = x = 5; iptr2 = y = 8; 内存单元地址变量 E990指针iptr1 E994指针iptr2 E998 指针cptr E99Cint型变量 x E99Eint型变量 y E9A0char型变量 ch E99C E99E E9A0 a 5 8 如果再执行 iptr1=iptr2; E99E 指针与数组的关系 n数组名(数组变量)本身就是一个指针,可以认为 它是一个常量指针 n可以定义指向数组的指针和指针数组等等 n例子 int w5; int *pw=w ; / pw表示数组w 或者说指向变 量w0 int *q= / q指向变量w2 int rr105,(*pr)5; / pr是指向一维数组 的指针, / 该一维数组有5 个元素,每 / 个元素是一个整数 pr=rr; / pr指向一维数组rr0, /该rr0有5个元素 int *qr5; / qr是指针数组,有5个元素, / 每个元素是一个指向int类变量 的指针 int *(tr5); /同qr 。tr是指针数组,有5个元 素, /每个元素是一个指向int类变量的指针 qr1= / qr1指向变量 y 指针所指变量 n指针变量和指针所指变量是两个不同的概 念 指针变量即指针,它本身存储某个内存地 址(某个变量的地址)。 指针所指变量为指针变量中所保存的内存 地址对应的变量。 地址内存 变变量 jEAB 6 3 变变量 iEAB 4 EAB4 变变量 iptrEAB 0 程序片段 int * iptr; int i=3 ,j ; iptr = 运算符“ * ”访问指针 所指变量的内容,称 为间接引用 运算符。 语句: j = *iptr 3 例7-1 指针变量与指针所指变量 该程序运行过程为: n程序第7行输出提示信 息 n在键盘输入23 n程序第9行输出提示信 息 n在键盘输入45 n程序第11行输出提示信 息 n在键盘输入r n程序第16行输出 n程序第17行输出 Input an integer : 23 Input another integer : 45 Input a char : r i=23 j=45 ch=r *pi=23 *pj=45 *pch=r 变量i , j , ch在内存中存储的内容, 分别通过对指针pi , pj , pch的间接引用获得。 void main()/* 2 */ int i,j; /* 3 */ char ch;/* 4 */ int *pi,*pj; /* 5 */ char *pch;/* 6 */ printf(“Input an integer:“); /* 7 */ scanf(“%d“, /* 8 */ printf(“Input an other integer:“);/* 9 */ scanf(“%d“, /* 10 */ printf(“Input a char:“); /* 11 */ scanf(“n%c“, /* 12 */ pi= /* 13 */ pj= /* 14 */ pch= /* 15 */ printf(“i=%d j=%d ch=%cn“,i,j,ch); /* 16 */ printf(“*pi=%d *pj=%d *pch=%cn”,*pi,*pj,*pch); /* 17 */ /* 18 */ 例7-2 用指针变量实现:输入两个 整数,按从大到小顺序输出 假设输入25 、38 ,该程序运 行到第10行结束时 i: pmax: 25 p: j: pmin:38 当程序执行完第13行 pmax=pmin; 当程序执行完第14行 pmin=p; void main() /* 2 */ int i,j; /* 3 */ int *pmax,*pmin,*p; /* 4 */ printf(“Input an integer:“); /* 5 */ scanf(“%d“, /* 6 */ printf(“Input an other integer:“); /* 7 */ scanf(“%d“, /* 8 */ pmax= /* 9 */ pmin= /* 10 */ if (i 、= 、 void main( ) char str255 , *p; scanf(“%s“,str); p=str; while( *p!=0 ) p+ ; printf(“The string length is %d n“; p-str); 程序运行若输入: abcdef 则输出结果为 The string length is 6 指针与数组 n密切的关系 数组名是数组的首地址,即a0的地址; 指针值也是一个地址如果一个指针p指向 数组a的首地址即指向a0,则p与a表示的是 同一个对象。 n事实上,在C中把指针和数组当作同一个概念看 待,数组名是指针,指针也是数组。 n可以认为数组名是常量指针。 用指针标识数组 n例如 int a5; int *iptr iptr=a; / 也可以使用 iptr= int i , *p; for(i=0;i *str2 ) / 比较当前字符 return 1; else if ( *str1 0 ) k=j; temp= arr_stri; arr_stri= arr_strk; arr_strk=temp; void out_string(char *arr_str,int n) int j; for ( j=0;j void main(int argc,char* argv ) printf(“argc=%dn“,argc); printf(“command name:%sn“, argv0); for(int i=1;i tt se.txt hope ee efe 程序运行结果为: argc=5 commard name:tt Argument 1:se.txt Argument 2:hope Argument 3:ee Argument 4:efe 本章小结 n本章主要介绍指针的概念与操作,并对指 针与数组关系进行详细介绍。重点掌握 l 指针变量与指针所指变量之间的关 系, l 指针与数组之间的关系。 只有掌握好这两种关系才能够正确理解指 针概念以及操作,从而正确使用指针。 作业 n必做 n7.5 n7.10 n7.13 n7.16 n7.18 n7.30 n选做 n7.19 n7.24 习题7.6 nint * p; 整型指针p nint * p; 整型的指针的指针p nint a; 作为函数的形参可以 nint a5; 整型数组,其中a为整型常量指针 nint *p; 作为函数的形参可以 nint *(p); 作为函数的形参可以 nint (*p); 行指针,作为函数的形参可以 nint *p5; 指针数组 nint *(p5); 指针数组 nint (*p)5 行指针 习题7.8 n已知 int a1020,i=2; na+i 指针的指针,相当于 na32 访问数组a中的一个元素 n*(*(a+2)+1) 访问a21 n*(*(a+4) 访问a40 n(a3+2) 值是 sort(int col,int row,int *p) 结束 交换 *(p+i)、 *(p+j) i=0; ihead) tmp=*tail; *tail=*head; *head=tmp; tail-; head+; return str; void main() char sp =“abcde“; reverse(sp); void main() char sp =“abcde“; char *string=sp; reverse(string); void main() char *sp=“abcde“; reverse(sp); char* reverse(char *str) char *head,*tail,tmp; head=tail=str; while(*tail!=0) tail+; tail-; while(tailhead) tmp=*tail; *tail=*head; *head=tmp; tail-; head+; return str; void main() char sp =“abcde“; reverse(sp); void main() char sp =“abcde“; char *string=sp; reverse(strin

温馨提示

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

评论

0/150

提交评论