昆工C语言-c语言第五讲.ppt_第1页
昆工C语言-c语言第五讲.ppt_第2页
昆工C语言-c语言第五讲.ppt_第3页
昆工C语言-c语言第五讲.ppt_第4页
昆工C语言-c语言第五讲.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、授课教师:杨瑾 ,c语言第五讲,int a=6,*p,*q;,指针复习,p=,6,a,p,q,2001,4001,6001,问:,p的值( ) *p的值() *(,指针复习,6,NULL,a,p,2001,4001,*p=8 不合法 不能通过空指针访问存储单元,p= *p=8 合法 给空指针重新赋值,指向变量a,在通过*p间接访问a. *p等价于a,1,引入:int a=6,b=7 ,*p=,指针变量加1:p+1 含义是指向紧接着的下 一个存储单元b。 p的值为变量a的地址,即2001. p+1的值为变量b的地址,即2003,一维数组和指针,P+1,引用方式: a, *p, *(,一维数组和指

2、针,引用方法,a,a0,a3,a4,a2,a1,a+1,a+i,main( ) int a5,i; for(i=0;i5;i+) scanf(%d,a+i); printf(n); for(i=0; i5;i+) printf(%d,*(a+i); ,课本p169 例2,一维数组和指针,a,a+i,指针变量p加下标代表该指针指向的具体的存储单元如:p0等价于数组元素a0, p1等价于a1,int a5; int *p=a 或 int *p= for(i=0,p=a;i5;i+) scanf(%d,p+i); printf(n); for(p=a; pa+5;p+) printf(%d,*p);

3、 ,p+1,p+i,p,a0,a3,a4,a2,a1,注意:p:指针变量,可以重新赋值,如p= int *p=a 或 int *p= int *p= ,p,q,课本p170 例4,一维数组和指针,main( ) int i ,s=0,t=1,2,3,4,5,6,7,8,9; for(i=0;i9;i+=2) s+=*(t+i); printf(“%dn“,s); ,习题p50 13,一维数组和指针,main( ) int a10=1,2,3,4,5,6,7,8,9,10,*p=a; printf(“%dn“,*(p+2); ,p,P+2,一维数组和指针,main( ) int a10=2,4,

4、6,8,10,y=0,x,*p; p= ,p,习题p50 15,p1等价于*(p+1) px等价于*(p+x),课本p169 例1,一维数组和指针,main( ) int a5=1,2,3,4,5,6,7,8,9,10; int *p= ,p,q,数组a可看成是具有两个数组元素a0,a1的一维数组,而a0,a1有分别是具有三个数组元素的一维数组。,int a24;,二维数组和指针,a0,a1,a,a0,a0+1,a1+1,引用方法: a11,*(,二维数组和指针,a0,a1,a,p+1,int *p=,p,p等价于a0, p+1等价于a0+1, p+2等价于a0+2, p+3等价于a1, p+

5、4等价于a0+1, p+5等价于a1+2, p0等价于a00, . , p2等价于a02,引用方法: a11,*(,二维数组和指针,a0,a1,a,引用方法: a11,*( int a24;,二维数组和指针,p,引用方法:*(p1+1), *(*(p+1)+1), p11(指针变量加下标代表它所指向的具体存储单元),p+1,p0等价于 int a32; p=a;,二维数组和指针,p,引用方法:*(p1+1), *(*(p+1)+1), p11,p+1,p+2,注意:区分 int *p2; int (*p)2,main( ) int a33,*p,i; p= ,习题p51 23,二维数组和指针,

6、p,注意指针变量名加下标的含义。,main( ) int a33,*p,i; p= ,习题p51 24,二维数组和指针,p,注意指针变量名加下标的含义。,main( ) int a32=0,(*ptr)2,i,j; for(i=0;i2;i+) ptr=a+i; scanf(“%d”,*ptr); ptr+; for(i=0;i3;i+) for(j=0;j2;j+) printf(“%2d”,aij); printf(“n”); ,习题p51 25,二维数组和指针,ptr,main( ) int a3=1,2,3,4,5,0,(*pa)3,i; pa=a; for(i=0;i3;i+) if

7、(i2) pa1i=pa1i-1; else pa1i=1; printf(“%d”,a01+a11+ a12); ,习题p51 31,二维数组和指针,ptr,void fun(int x,int y) int t=0; if(xy) t=x;x=y;y=t; main( ) int a=1,2,3,4,5,s=0; fun(a3,a2); printf(“%d,%d”,a2,a3); ,1.一维数组元素作实参,数组和函数,int fun(int *x,int n) int i,sum=0; for(i=0;in;i+) sum=sum+xi; return sum; main( ) int

8、a=1,2,3,4,5,s=0; fun(a,5); printf(“%dn”,s); ,2.一维数组名作实参,数组和函数,x,还可写成 int fun(int x ,int n) 或(int x5,int n),void sum(int p ) p0=p-1+p1; main( ) int a10=1,2,3,4,5,6,7,8,9,10; sum( ,3.一维数组元素地址作实参,数组和函数,p,void fun(int a3,int b3) int i,j; for(i=0;i3;i+) for(j=0;j3;j+) bij=aji; main( ) int a33=1,2,3,4,5,6

9、,7,8,9;int b33; fun(a,b); for(i=0;i3;i+) for(j=0;j3;j+) printf(“%3dn”,bij); ,4.二维数组名作实参,数组和函数,还可写成 (int a33,int b33) 或(int (*a)3,int (*b)3),fun(int *a) main( ) int a33,*p3; for(i=0;i3;i+) pi=ai; fun(p); ,5.指针数组作实参,数组和函数,还可写成 (int *a ) (int *a3),void change(int k) k0=k5; main( ) int x10=1,2,3,4,5,6,7

10、,8,9,10,n=0; while(n=4) change( ,习题 p95 2,数组和函数,int fun(int x,int n) static int sum=0; for(i=0;in;i+) sum+=xi; return sum; main( ) int a=1,2,3,4,5,b=6,7,8,9,s=0; s=fun(a,5)+fun(b,4); printf(“%dn”,s); ,习题 p95 3,数组和函数,int fun(int x,int n) static int sum=0; for(i=0;in;i+) sum+=xi; return sum; main( ) i

11、nt a=1,2,3,4,5,b=6,7,8,9,s=0; s=fun(a,5)+fun(b,4); printf(“%dn”,s); ,习题 p95 3,数组和函数,用户定义类型,typedef 类型名 标识符; 1. typedef int ZHENG_SHU; ZHENG_SHU a,b; /等价于 int a,b; 2. typedef int *INTP; INTP p,q; /等价于 int *p,*q; 注意:是typedef int *INTP; 不是typedef *int INTP;,用户定义标识符,一般用大写字母表示,已定义过的数据类型 (如:int char ),关键字

12、 作用:用用户标识符来代替一个已存在的类型名。,宏定义,不带参数的宏定义 #define 宏名 替换文本 或 #define 宏名 如:#define PI 3.1415926 #define ADDPI (PI+1) #define ADDPI2 PI+1,/替换文本中又包含宏名PI,x=2*ADDPI x=2*ADDPI2 printf(“PI is:”); 输出结果:PI is:,x=2*(PI+1)=2*(3.1516926+1),x=2*PI+1=2*3.1516926+1,用替换文本简单替换宏名,不做计算。 (宏展开),双引号中不替换,带参数的宏定义 #define 宏名(形参表)

13、 表达式 如:#define ADD(x,y) (x+y) #define ADD2(x,y) x+y,宏定义, x=2*ADD(2,3) x=2*ADD2(2,3) 注意:带参数的宏定义与函数的区别。 1. 形参不指定类型。 2. 宏替换不占运行时间。,x=2*(2+3)=10,x=2*2+3=7,宏展开时,用表达式替换宏名,实参代替形参(简单替换),文件包含,标识符作用域,存储分类,变 量,局部 变量,全局 变量,自动变量(auto),寄存器变量(register),静态变量(static),说明 方式,extern,static,main() int i=1,i_sum; float f

14、,f_sum; int i; i=10; printf(“(1)i=%dn”,i); printf(“(2)i=%dn”,i); ,main() register int i=1; int s=0; for(i=0;i100;i+) s+=I; printf(“s=%dn”,s); ,fun(int a) int b=0;static int c=3; b+; c+; return (a+b+c); main() int i,a=5; for(i=0;i3;i+) printf(“ %d %dn”,i,fun(a); printf(“n”); ,标识符作用域,存储分类,变 量,局部 变量,全局

15、 变量,自动变量(auto),寄存器变量(register),静态变量(static),说明 方式,extern,static,int sum; int fun1( ) sum+=20; int a; int fun2( ) a+20; sum+=a; main() sum=0; fun1(); a=8; fun2(); printf(“sum=%d a=%d”,sum,a); ,void fun2(char a,char b) printf(%c%c,a,b); char a=A,b=B; void fun1( ) a=C,b=D; main( ) fun1(); printf(%c%c,a

16、,b); fun2(E,F); ,习题p78 例14,标识符作用域,存储分类,全局变量 a,b作用域,int f( ) static int i=0; int s=1; s+=i;i+; return s; main( ) int i,a=0; for(i=0;i5;i+) a+=f(); printf(%d,a); ,习题p78 例15,标识符作用域,存储分类,静态局局变 量i作用域,动态存储分配,1. malloc函数 int *p; p=(int *)malloc(4); 或 p=(int *)malloc(sizeof(int); 注意: 分配的存储单元无确定初值; 单个数据类型 手动释放 free(p);,动态存储分配

温馨提示

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

评论

0/150

提交评论