计算机C语言程序设计ch07指针上.ppt_第1页
计算机C语言程序设计ch07指针上.ppt_第2页
计算机C语言程序设计ch07指针上.ppt_第3页
计算机C语言程序设计ch07指针上.ppt_第4页
计算机C语言程序设计ch07指针上.ppt_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

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

文档简介

第七章 指针 n指针与变量 n指针运算 n指针与数组 n指针与字符串 n指向指针的指 针 n命令行参数 n本章小结 作业: 7.6 7.8 7.9 7.10 7.13 7.16 7.23 7.27 练习: 7.1-7.5 7.7 7.11 7.12 7.14 7.15 7.17-7.19 n指针是高级程序设计语言中一个重要的概念 n正确灵活运用指针 可有效地表示和使用复杂的数据结构 可动态分配内存空间,节省程序运行空间 ,提高运行效率 n不正确理解和使用指针,指针将是程序中最危险 的成分,由此带来的后果可能是无法估量的。 指针 必须清楚:数据在内存中的存储和访问方式 已知:每个变量 在计算机内存占用一块存储区 该存储区的地址就是相应变量的 地址 变量可能有值 该存储区保存的内容就是相应变 量的值 5 V 0F000 : 变量地 址 变量名 变量值 变量的存储 区 7.1 指针与变量 n例如有变量声明 char c=S; int v=27,u=32; int *p = 则编译程序分别给变量 c 、v 、u 、p 分配存储空间如图所示 其中: B900是变量v的地址 也是变量v的指针 B904 B900变量p B90232变量u B90027变量v B8FFS变量c 地址 内存变量名 n指针即是地址 变量的指针就是变量的地址 存放指针(变量地址)的变量是指针变量 指针变量简称指针 n必须理解清楚: 给变量分配的内存区域 该内存区域的地址 该内存区域保存的内容 以及它们之间的关系 指针类型与指针变量 指针类型: 格式 指向T类型变量的指针类型用: T * 其中:T称为该指针类型的基类型 在C中,任何一个类型都伴随着一个指向本类型 变量的指针类型 基类型(指针所指向的类型)可以是 基本数据类型 构造型数据类型 指针类型 函数 指针变量: n声明指针变量 T*p1 , *p2 , *pn ; 其中,T * 指针类型,T称为该指针类型的基类型 pi是标识符,是指针类型的变量,指向T类 型变量的指针变量 n意义 指针变量简称指针 是一种特殊的变量 它里面存储的“值”被解释成为一个变量的地 址,确切的说是计算机内存的一个地址 n T *v; 称 “指向T类型变量的指针变量v” “v指向T类型” “T类型的指针v” n例如 int x , y ; char ch = a; int *ip1= /* ip1和ip2是指向int类型变 量的指 ip2= 针变量,x和y指针所指的 变量*/ char * cp = /* cp指向char类型变量的指 针变量*/ float a,b; float *pa= /* pa是指向float类型变量 的指针变 量*/ cp= ip1= n指针变量的值是内存地址(即变量的地址) n取地址的方法: 基本类型变量、数组成员、结构体变量、公 用体变量等,用求地址运算符“ px= pa=a;或pa= 函数的地址为函数的入口地址,用函数名字 表示 设有声明: int *ip1, *ip2 ; char * cp; int x , y ; char ch = a; 在此基础上,有操作: ip1 = cp = x = 5;或*ip1=5; ip2 = y = 8; 内存单元地址变量 E990指针ip1 E994指针ip2 E998 指针cp E99Cint型变量 x E99Eint型变量 y E9A0char型变量 ch E99C E99E E9A0 a 5 8 如果再执行 ip1=ip2; E99E 指针变量ip1 指针所指变量x n访问变量(指针所指变量)的方法 直接访问:直接使用变量的名字 int v=10; v=v*10; 间接访问:用指向该变量的指针 *p 比如访问变量 v 可以用下面方式来实现: int *p = v= (*p)*10 ; 它通过指向 v 的指针变量 p ,采用间接访问的 方 式实现对变量 v的访问,取出变量 v 的值 参与运算 n区分指针变量和指针所指的变量 n区分开指针值和指针所指变量的值 地址内存 变变量 jEAB 6 3 变变量 iEAB 4 EAB4 变变量 ipEAB 0 程序片段 int * ip; int i=3 ,j ; ip = j = *ip; 3 注意:指针变量在 使用前一定有值 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-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 */ 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; int v ; scanf(“%s“,str); p=str; while( *p!=0 ) p+ ; printf(“The string length is %d n“; p-str); 程序运行若输入: abcdef 则输出结果为 The string length is 6 7.3 指针与数组 n密切的关系 数组名是数组的首地址,即a0的地址 指针值也是一个地址,如一个指针p指向 数组a的首地址即指向a0,则p与a表示的是 同一个对象 n事实上,在C中把指针和数组当作同一个概念看 待,数组名是指针,指针也是数组 n数组名是常量指针 7.3.1 用指针标识数组 n例如 int a5; int *iptr iptr=a; / 也可以使用 iptr= int i , *p; for(i=0;i 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 *str2 ) / 比较当前字符 return 1; else if ( *str1 copy jilin.dat changchun.dat 产生如下信息。 例7-11 编程序输出命令行的参数内容 #include 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 nam

温馨提示

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

评论

0/150

提交评论