C语言指针应用课件_第1页
C语言指针应用课件_第2页
C语言指针应用课件_第3页
C语言指针应用课件_第4页
C语言指针应用课件_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

第7章指针C语言大学实用教程1第7章指针C语言大学实用教程1内容提要指针的概念数组的下标法引用和指针法引用利用指针数组对各个字符串进行排序,存取等操作带参数的main()函数内容提要指针的概念指针概述指针的概念一、什么是变量的地址,什么是变量的内容?每个变量在内存中都占有一定字节数目的存储单元,C编译程序在对程序编译时,根据程序中定义的变量的类型,在内存中为其分配相应字节数目的存储空间。变量在内存中所占存储空间的首地址,就称为该变量的地址(address).变量在内存中所占存储单元中存放的数据,就称为变量的内容(content)。指针概述指针的概念直接寻址间接寻址指针变量专门存放地址型数据的变量运算符&和*的使用&(*p1)/*该表达式的值代表的是变量a

的地址*/*(&a)/*该表达式引用的是变量a的内容*/直接寻址间接寻址引入指针的原因为函数提供修改变量值的手段

指针为C的动态内存分配系统提供支持指针为动态数据结构提供支持

指针可以改善某些子程序的效率例:任意从键盘输入两个整数,然后将交换后的数据重新输出。

C语言指针应用课件#include<stdio.h>voidswap(intx,inty);main(){inta,b;printf(“Pleaseentera,b:”);scanf(“%d,%d”,&a,&b);

printf(“Beforeswap:a=%d,b=%d\n”,a,b);swap(a,b);printf(“Afterswap:a=%d,b=%d\n”,a,b);}voidswap(intx,inty)

{inttemp;temp=x;x=y;y=temp;}仔细分析,是否成功交换???#include<stdio.h>仔细分析,是否成功交换??变量的指针作为函数参数变量指针指针变量

变量的指针就是变量的地址,指针变量就是C语言中专门用于存放地址型数据的变量指针变量的定义类型关键字*指针变量名;

例:1)int*p1,*p2;2)inta,b;int*p1=&a,*p2=&b;变量的指针作为函数参数变量指针指针变量指针变量的运算1)指针变量的内容只能是地址,而不能是数据,必须用相同基类型的变量的地址对其进行赋值;2)指针变量必须经初始化后才能使用,否则指针变量所指向的存储单元是不确定的,对其所作的赋值等操作将是很危险的。3)由于指针的值就是地址,指针运算实质上就是对地址的运算。指针运算只能参与赋值运算、算术运算和关系运算。其中,指针可参与的算术运算值有两种:加和减,即加、减一个整数或自增、自减运算。指针变量的运算

分析:

a=*p++;a=*p;p=p+1;

a=(*p)++;a=*p;*p=*p+1;分析:重新解决问题#include<stdio.h>voidswap(int*x,int*y);main(){inta,b;printf(“Pleaseentera,b:”);scanf(“%d,%d”,&a,&b);

printf(“Beforeswap:a=%d,b=%d\n”,a,b);swap(&a,&b);printf(“Afterswap:a=%d,b=%d\n”,a,b);}voidswap(int*x,int*y)

{inttemp;temp=*x;*x=*y;*y=temp;}重新解决问题#include<stdio.h>字符指针作函数参数

字符数组与字符指针的不同1)定义方法不同;charstr[10];定义的是一个字符数组,而

char*ptr;定义的是一个字符指针。2)初始化含义不同;charstr[10]={“China”};char*ptr=”China”;字符指针作函数参数字符数组与字符指针的不同3)赋值方法和含义不同;指针变量可以用如下方式赋值:char*ptr;ptr=”China”;/*正确*/charstr[10];str=”China”;/*错误*/strcpy(str,”China”);3)赋值方法和含义不同;4)输入字符串时略有不同。用scanf语句输入字符串到数组中,用charstr[10];scanf(“%s”,str);而用字符指针输入字符串时,必须确保字符指针事先已指向了一个数组的首地址,即charstr[10],*ptr;ptr=str;scanf(“%s”,ptr);/*正确*/而char*ptr;scanf(“%s”,ptr);/*错误*/4)输入字符串时略有不同。5)字符数组的数组名是一个地址常量,它的值是不能改变的,而字符指针是一个变量,它的值是可以改变的。for(ptr=str;*ptr!=’\0’;ptr++)printf(“%c”,*ptr);5)字符数组的数组名是一个地址常量,它的值是不能改变的,而字指针和数组间的关系一维数组的地址和指针数组的指针:指数组的起始地址。指向数组的指针变量:

inta[9];intp;p=&a[0];(或p=a;)通过指针引用数组元素main(){inta[10],*p;for(p=a;p<a+10;p++)scanf(“%d”,p);for(p=a;p<a+10;p++)printf(“%d”,*p);}可有五种引用数组元素的方法指针和数组间的关系二维数组的地址和指针行地址和列地址1)a[i][j]2)*(a[i]+j)3)*(*(a+i)+j)4)(*(a+i))[j]行指针和列指针定义行指针:类型(*行指针名)[常量n]定义列指针:int*p;(例题)二维数组的地址指针数组指针数组:类型名*数组名[数组长度]如:int*p[4];指针数组指针数组:例题:编程将若干字符串按字母顺序由小到大排序后输出。#include<stdio.h>#include<string.h>main(){inti,j;char*temp;charptr[5]={“Pascal”,”Basic”,”Fortran”,”Java”,”VisualC”};printf(“Beforesorted:\n”);for(i=0;i<5;i++)puts(ptr[i]);/*输出排序前的5个字符串*/例题:for(i=0;i<4;i++)/*交换法排序*/

for(j=i+1;j<5;j++)if(strcmp(ptr[j],ptr[i])<0)/*若字符串小于ptr[i]所指字符串*/{

temp=ptr[i];/*则交换指针变量ptr[j]和ptr[i]的指向*/

ptr[i]=ptr[j];ptr[j]=temp;}printf(“Aftersorted:\n”);for(i=0;i<5;i++)puts(ptr[i]);/*输出排序后的5个字符串*/}for(i=0;i<4;i++)带参数的main函数和命令行参数

main(intargc,char*argv[]){…..}形参argc表示命令行中参数的个数

形参argv被说明为指针数组,用于指向命令行中的多个命令行参数(字符串)。带参数的main函数和命令行参数

main(intargc下面的程序用于演示命令行参数与main函数各形参之间的关系。main(argc,argv)intargc;char*argv[];{inti;printf(“Thenumberofcommandlineargumentsis:%d\n”,argc);printf(“Theprogramnameis:%s\n”,argv[0]);if(argc>1){printf(“Theotherargumentsisfollowing:\n”);for(i=1;i<argc;i++)printf(“%s\n”,argv[i]);}}下面的程序用于演示命令行参数与main函数各形参之间的关系。运行程序假定上面程序的文件名是echo.c,则在程序成功编译和连接

温馨提示

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

评论

0/150

提交评论