程序设计(C语言).ppt_第1页
程序设计(C语言).ppt_第2页
程序设计(C语言).ppt_第3页
程序设计(C语言).ppt_第4页
程序设计(C语言).ppt_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

第8章 指针 1.存储单元:构成存储单元的基本单位是字节,不同类型的存储单 元由数量不等的连续字节组成,计算机给每个字节一个惟一的编 号。 2.指针:构成某一存储单元的连续字节的起始字节编号称为该存储 单元的地址,也称为该存储单元对应变量的指针。即:变量的指 针就是变量的地址 8.1.1 指针的概念 如果有:int a=5;则内存情况如图8-1 所示。 a是存储单元(即变量)的名字, 5是存放在存储单元中的内容, 存储单元的地址是2000。 5 2000 a 2001 图8-1 8.1.2 指针变量 n指针变量:存放某一变量的地址的变量称为指针变量。 n指针变量的一般定义形式如下: 类型标识符 *标识符; 例:int *p; n允许指针变量在定义中初始化。 例如:int a=5,*p= /* 图8-2 8.1.3 指针变量的运算 1赋值运算 n不能直接给一个指针变量赋一个整数 n变量的地址是通过对变量取地址运算得到的。 int *p,*q,*m,*n; p= q=p; m=p+1; n=q-i; 202 0 a 2022 2023 2024 2025 2021 int *p; p= n则:* p与a是相同的,表示同一个变量。 可以是常量、变量 或表达式 8.1.3 指针变量的运算 n“ int *p; p= b=*p; *p=5; n则:指针变量p指向变量a;*p(即a)的值赋给b,b 的值为3;将5赋给*p(即a),a的值为5。 8.1.3 指针变量的运算 3比较运算 当两个基类型相同的指针变量已被正确赋值后,可以对指针变量的 值进行比较运算。 如果有: int a6; int *p,*q; p= q= 指针变量p、q的指向如图8-4所示。 此时,对p、q进行比较运算,则有: pq、p=q、p= =q的值为假; p main() int *p1,*p2,*p,a,b; scanf(“%d,%d“, p1= p2= if (a main() int a34; int *p,i,j; p=a0; for(i=0;i main() int a34; int *p,i,j; for(p=a0;p main() int a34; int (*p)4,i,j; p=a; for(i=0;i main() int a34; int (*p)4,i,j; p=a; for(i=0;i main() int a34=1,3,5,7,9,11,2,4,6,8,10,12; int *b3,i,j; for(i=0;i main() char *str=“I am happy”; printf(“%s”,str); 0 I a m h a p p y str 二、 字符数组与指针变量 1. 赋初值 static char str=”I love china!”;(静态或外部类) char *a=”I love china!”;(不必要求为静态或外部类) 2. 赋值 char *a; a=”I love china!”;(正确) char str14; str=”I love china!”(错误) 3. 输入字符串 char str10; scanf(“%s”,str); 或gets(str);(正确) char *a; scanf(“%s”,a); (错误) 8.3.4 指针与字符串 用指针输入字符串正确的做法应是: char str10; char *a; a=str; scanf(“%s”,a); gets(a); 或 a=(char *)malloc(10); scanf(“%s”,a); 8.3.4 指针与字符串 输出字符串 char *s=”I am a student”; puts(s); 或printf(“%sn”,s); char str=”I am a student!”; puts(str); 或printf(“%sn”,str); 8.3.4 指针与字符串 3用字符指针处理字符串应用举例 例8.6 将字符串s1从第m个字符开始剩余的所有字符送 入到另一个字符串中。 #include main() int m; char s180,s280,*p,*q; printf(“input a string:n“); gets(s1); printf(“input start point:n“); scanf(“%d“, p=s1+m-1; q=s2; while(*p!=0) *q=*p; p+; q+; *q=0; puts(s2); 8.3.4 指针与字符串 例8.7 利用字符指针数组输出多个字符串。 #include main() char *s4; int i; s0=“China“; s1=“Shanghai“; s2=“Beijin“; s3=“Wuhan“; for(i=0;i main() int a,b; scanf(“%d %d“, printf(“a=%d,b=%dn“,a,b); if (a main() int a10,i; for(i=0;iak) k=j; t=ak; ak=ai; ai=t; #include main() int a10,*p,i; for(i=0;i main() char a 80,*b; scanf(“%s“,a); b=copy(a); printf(“%s“,b); 8.4.3 函数指针 1函数的地址 函数在编译时被分配占用一段连续的存储单元,该连 续的存储单元的首地址称为函数的地址。在C语言程 序中,用函数的名字表示该函数的地址。 例:如果有如下函数定义: int sum(int x,int y) int z; z=x+y; return(z); 则函数名sum表示该函数的地址。 n2指向函数的指针变量(函数指针) n将函数的首地址存入一个指针变量中,该指针变量就被称为指向 函数的指针变量,又称为函数指针。 n函数指针的定义: 类型标识符 (*标识符)(); n例如:int (*p)(); n说明: n(1)“类型标识符”是函数指针指向的函数返回值的类型。 n(2)“标识符”是函数指针(指向函数的指针变量)的名字。 n(3)“(*标识符)”表示该标识符是一个指针变量。 n(4)标识符后的“()”表示该指针变量指向一个函数。 8.4.3 函数指针 n函数指针的赋值(将函数指针指向某一函数): 函数指针名=函数名; n例如:p=sum; n利用函数指针调用其指向的函数: n(*函数指针名)() 8.4.3 函数指针 例如:#include main() int a,b,c; int sum(int,int); int (*p)(); p=sum; scanf(“%d%d“, c=(*p)(a,b); printf(“sum=%d“,c); int sum(int x,int y) int z; z=x+y; return(z); 8.5 指向指针的指针 8.5 指向指针的指针 n存放另一指针变量的地址的指针变量,称为指向指针 的指针。 n指向指针的指针变量的定义: 类型标识符 *标识符; n例如:如果有: int *p,*q,x; q= p= 则有如图8-18所示的指针指向。 23p xq 8.5 指向指针的指针 n如果将二维数组的每一行的地址存储在一个指针数组 中,再将指针数组的首地址赋给一个指向指针的指针 变量,则也可以使用指向指针的指针变量来处理二维 数组。 n例如,如果有: int a34; int *b3,i,j; int *p; for(i=0;i main() int a34=1,3,5,7,9,11,2,4,6,8,10,12; int *b3 ,i,j; int *p; for(i=0;i main() char *s4,*p; int i; s0=“China“; s1=“Shanghai“; s2=“Beijing“; s3=“Wuhan“; p=s; for(i=0;i main(int argc,char *argv ) while(argc1) +argv; printf(“%sn”,*argv); -argc; 将上述程序以文件名echo.c存盘,经过编译、连接后,在命令行上 输入命令及屏幕显示结果如下: C:echo China Beijin Shanghai China Beijin Shanghai argv0 argv1 argv2 argc=3 8.6 命令行参数 n带参数的main()的函数首部形式如下: main(int argc,char *argv ) 说明: (1)第一个形参argc是int类型,保存命令行中字符串的个数。 (2)第二个形参argv是指向字符的指针数组,保存命令行中给出的 字符串。 n调用带参数的main()函数的命令行形式如下: 命令名 参数1 参数2 参数n n注意:命令名、各参数之间用空格隔开。 字符串的个数(包括命令名字符串和所有参数字符 串,即参数个数n+1)传递给main函数中的第一个 参数argc, 将命令行中的字符串(同样包括命令名字符串和所 有参数字符串)传递给main函数中的第二个参数 argv。 8.7 本章考点 n指针与指针变量的概念。 n指针变量的运算。 n一维数组的地址、指向一维数组的指针及其应用。 n二维数组的地址、指向二维数组的指针及其应用。 n指针数组的概念及其应用。 n用指针表示字符串。 n指针变量作为函数参数。 n指向指针的指针变量及其应用。 n命令行参数的基本概念。 8.7 本章考点 8.8 典型试题详解 1对于基类型相同的两个指针变量,不能进行的运算是 _。 A)后,程序的输出结果是_。 main(int argc,char *argv) int i; if(argc=0) return ; for(i=1;iarg

温馨提示

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

评论

0/150

提交评论