C语言程序设计第8章-指针的使用_第1页
C语言程序设计第8章-指针的使用_第2页
C语言程序设计第8章-指针的使用_第3页
C语言程序设计第8章-指针的使用_第4页
C语言程序设计第8章-指针的使用_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

<<C语言程序设计>>课程第8章指针的使用C语言程序设计第8章-指针的使用全文共25页,当前为第1页。主要内容1地址与指针2用指针操作一维数组3用字符指针操作字符串C语言程序设计第8章-指针的使用全文共25页,当前为第2页。问题引入指针的作用:通过房间号(地址)进行访问的效率,高于通过房间名(变量名)进行访问的效率。C语言程序设计第8章-指针的使用全文共25页,当前为第3页。8.1地址与指针编号采用八位十六进制数来表示1字节00000000000000020000000300000004(地址)00000001内存由许多存储单元组成,每个存贮单元是一个字节为了区分存储单元的不同,为这些内存单元编号,人们把存贮单元的编号称为内存地址。C语言程序设计第8章-指针的使用全文共25页,当前为第4页。8.1地址与指针通过地址能找到对应的内存单元,因此习惯说,一个地址指向某块内存单元,所以C中将地址形象化地称为“指针”。如果一个变量专门用来存放其他变量地址则将它称为指针变量。整型变量aC语言程序设计第8章-指针的使用全文共25页,当前为第5页。8.1地址与指针指针变量的定义一般形式:

数据类型*指针名;指针的目标变量的数据类型表示定义指针变量不是‘*’运算符例int*p1,*p2;float*q;注意:1、指针变量名是p1,p2,不是*p1,*p2,“*”不是变量名的一部分2、指针变量只能指向定义时所规定类型的变量3、指针变量定义后随机指向某个单元很危险,使用前必须初始化。C语言程序设计第8章-指针的使用全文共25页,当前为第6页。8.1地址与指针指针变量的定义与初始化intn; //定义整型变量nint*p; //定义一个指针变量,p=&n; //将整型变量n的地址存在p中scanf("%d",p);//等价于scanf("%d",&n);【例8-1】C语言程序设计第8章-指针的使用全文共25页,当前为第7页。8.1地址与指针指针变量的定义与初始化charstr[10]; //定义字符型一维数组strchar*cp; //定义一个指针变量,能存放char型变量的地址cp=str; //将字符数组str的首地址存在cp中gets(cp); //为cp所指向的空间输入字符串,等价于gets(str);【例8-2】C语言程序设计第8章-指针的使用全文共25页,当前为第8页。8.1地址与指针引用指针变量的一般方法为:*指针变量名说明:(1)“*”为指针运算符,用来求得指针变量所指向的变量的值,即指针变量所指向的内存单元的内容。(2)此处的“*”不同于指针变量定义语句中的“*”,指针变量定义语句中的“*”是一个标志符,此处的“*”是运算符。如果p指向i,下面两个语句作用相同:①i=3;②*p=3;3C语言程序设计第8章-指针的使用全文共25页,当前为第9页。8.1地址与指针【例8-4】通过指针变量访问的方式计算两个整数的和。

#include<stdio.h>voidmain(){inta,b,s;int*pa,*pb;//定义两个整型指针变量

pa=&a;//使pa指向变量apb=&b; //使pb指向变量bscanf("%d%d",pa,pb);s=*pa+*pb; //通过指针变量访问的方式求和

printf("s=%d\n",s); //输出求和结果}参考代码C语言程序设计第8章-指针的使用全文共25页,当前为第10页。8.2用指针操作一维数组

int*p(1)指针与整数的加减运算(p+n,p-n)。(2)指针加1、减1运算(p++,++p,p--,--p)。注意:p是一个指针,p++是向前移动1个数据单位,而不是1个字节,1个数据单位的大小取决于指针指向的变量的数据类型。指针的算术运算C语言程序设计第8章-指针的使用全文共25页,当前为第11页。8.2用指针操作一维数组

一个数组包含若干元素,每个数组元素都在内存中占据存储单元,它们都有相应的地址。inta[10];//定义一个整型数组a,它有10个元素int*p;//定义一个基类型为整型的指针变量pp=&a[0];//将元素a[0]的地址赋给指针变量p,使p指向a[0]在C语言中,规定数组名代表数组中第一个元素(0号的元素)的地址,即数组在内存中的起始地址。因此,下面两个语句等价:p=&a[0];p=a;数组名是表示数组首地址的地址常量C语言程序设计第8章-指针的使用全文共25页,当前为第12页。8.2用指针操作一维数组

如果p的初值为&a[0],则:(1)p+i和a+i就是a[i]的地址,或者说,它们指向a数组的i号元素。C语言程序设计第8章-指针的使用全文共25页,当前为第13页。8.2用指针操作一维数组

(2)*(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即a[i]。(3)指向数组元素的指针变量也可以带下标,如p[i]与*(p+i)等价。p[0]p[i]C语言程序设计第8章-指针的使用全文共25页,当前为第14页。8.2用指针操作一维数组

数组元素表示方法

inta[10];int*p=a;a[i]p[i]*(p+i)*(a+i)(1)下标法:如a[i]或p[i]形式;(2)指针法:如*(a+i)或*(p+i)。其中a是数组名,p是指向数组第一个元素的指针变量。则*(p+i)就是a[i]。使用指针法能使编译后的目标程序质量更高。C语言程序设计第8章-指针的使用全文共25页,当前为第15页。【例8-7】输出一维数组各元素地址#include<stdio.h>voidmain(){inta[5],*p,k;p=a;printf("(1)获取各个数组元素地址:\n");for(k=0;k<5;k++)printf("&a[%d]=%p\n",k,&a[k]);printf("(2)利用指针表示数组元素的地址:\n");for(k=0;k<5;k++)printf("p+%d=%p\n",k,p+k);}参考代码C语言程序设计第8章-指针的使用全文共25页,当前为第16页。8.2用指针操作一维数组

数组名作函数参数如果函数处理数组,数组名和元素个数要分别做两个形参书写。例:编写函数求一个一维数组中元素的最小值intmin(inta[],intn)C语言程序设计第8章-指针的使用全文共25页,当前为第17页。【例8-9】用函数计算某个整型数组的各元素之和。

#include<stdio.h>intsum(int*,int); //函数声明voidmain(){inta[5]={0,1,2,3,4},s;s=sum(a,5); //函数调用

printf("各个数组元素之和为:%d.\n",s);}intsum(int*p,intn) //函数定义 {inti,t=0;for(i=0;i<n;i++)t+=*(p+i); //等价于t+=p[i];returnt;}参考代码C语言程序设计第8章-指针的使用全文共25页,当前为第18页。8.3用字符指针操作字符串

字符串常量是由双引号括起来的字符序列。例如“astring”.C编译程序还自动给该字符串序列的末尾加上一个空字符‘\0’,用以标志字符串的结束。字符串实质上是存放在某存储区域的一串字符序列,所以可以用字符指针指向字符串,通过字符指针访问该存储区域。C语言程序设计第8章-指针的使用全文共25页,当前为第19页。8.3用字符指针操作字符串

char*cp;

cp="astring";

该语句等价于:char*cp="astring";【例8-10】通过cp来访问这一存储区域,如*cp或cp[0]就是访问字符'a',而cp[i]或*(cp+i)就相当于字符串的第i+1个字符。

C语言程序设计第8章-指针的使用全文共25页,当前为第20页。【例8-11】将字符串中的指定字符用另一个字符替换。

分析1、自定义函数replace实现字符替换功能,用指针p访问要操作的字符串

2、变量oldc和newc分别代表替换前和替换后的字符。思想:从p指向的第一个元素开始,依次判断p[i]是否为字符oldc,如果是,则用newc替换oldc,当p所指向的字符为字符串结束标志'\0'时为止。

C语言程序设计第8章-指针的使用全文共25页,当前为第21页。#include<stdio.h>voidreplace(char*,char,char); //函数声明voidmain(){chars[]="MynameisJason.";charc1,c2;printf("\n原来的字符串=%s",s);printf("\n请指定一个被替换的字符:");c1=getchar();fflush(stdin);//清空输入缓冲区函数

printf("请输入一个新字符:");c2=getchar();replace(s,c1,c2);printf("新的字符串=%s\n",s);}参考代码C语言程序设计第8章-指针的使用全文共25页,当前为第22页。voidreplace(char*p,charoldc,charnewc){ inti; for(i=0;p[i]!='\0';i

温馨提示

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

评论

0/150

提交评论